diff --git a/AGENTS.md b/AGENTS.md index 0d279c8217..e938846f81 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -125,7 +125,6 @@ Pre-commit hooks via Husky format then lint staged source files. Pre-push runs ` - `REA_V8_INSPECTOR_ENDPOINTS_JSON` (optional): approved literal-loopback Node/Electron Inspector HTTP endpoints. - `REA_V8_INSPECTOR_FILE_ROOTS_JSON` (optional): canonical filesystem roots approved for Inspector targets and script locations. - `REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON` (optional): exact HTTP(S) origins approved for Electron renderer Inspector targets and scripts. -- `REA_INVESTIGATION_INPUT_ROOTS_JSON` (optional): canonical filesystem roots approved for static JavaScript/Electron application analysis and other investigation inputs. - `REA_JAVASCRIPT_REPLAY_ENABLED` (optional, default `false`): add controlled extracted-module execution authority to the administrator ceiling. - `REA_JAVASCRIPT_REPLAY_ROOTS_JSON` (optional): exact canonical source roots approved for controlled replay. - `REA_JAVASCRIPT_REPLAY_NODE_PATH`, `REA_JAVASCRIPT_REPLAY_BWRAP_PATH`, `REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH`, `REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH`, and `REA_JAVASCRIPT_REPLAY_SHELL_PATH` (optional): absolute paths committed by each replay plan; defaults target the current Node runtime and standard Linux system executables. diff --git a/README.md b/README.md index 7264083d0e..190642c08e 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ See a feature in an app that you want in your own product? Give the app to your agent—even without its source code. With REA, the agent can investigate the feature, explain how it works, show its evidence, and build a version adapted to your stack and requirements. -REA gives agents one consistent way to investigate software. Today that includes deep native analysis and function dossiers through Hopper or bring-your-own Ghidra on Linux, plus an experimental Windows x64 Ghidra P0 for approved native PE applications; execution-free managed PE/CLI triage; reproducible Evidence v2 records; controlled process capture; passive website, Electron page, and Node/Electron V8 Inspector observation; bounded JavaScript/source-map reconstruction; and a versioned domain graph for connecting JavaScript application layers without confusing static inference with runtime observation. The longer-term toolkit extends the same agent workflow to APIs, protocols, mobile artifacts, firmware, richer runtime behavior, and differences between versions. +REA gives agents one consistent way to investigate software. Today that includes deep native analysis and function dossiers through Hopper or bring-your-own Ghidra on Linux, plus an experimental Windows x64 Ghidra P0 for approved native PE applications; execution-free managed PE/CLI triage; reproducible Evidence records; controlled process capture; passive website, Electron page, and Node/Electron V8 Inspector observation; bounded JavaScript/source-map reconstruction; and a versioned domain graph for connecting JavaScript application layers without confusing static inference with runtime observation. The longer-term toolkit extends the same agent workflow to APIs, protocols, mobile artifacts, firmware, richer runtime behavior, and differences between versions. Reverse engineering normally makes the operator choose a tool, learn its API, move evidence between programs, and decide what to inspect next. REA gives that work to the agent through commands, skills, structured results, and repeatable investigation workflows. @@ -265,7 +265,7 @@ Uninstall preserves Hopper, Node.js, evidence, captures, external evidence roots | ---------------------------------------------------------------- | ------------------------------------------------------------------------- | | Ask an agent to investigate an app and build a feature | Install the skill, then talk to your agent | | Inspect or decompile one part of an app from the Terminal | `rea analyze` or `rea decompile` | -| Validate, canonicalize, or compare Evidence v2 bundles | `rea evidence-import`, `rea evidence-export`, or `rea compare` | +| Validate, canonicalize, or compare Evidence bundles | `rea evidence-import`, `rea evidence-export`, or `rea compare` | | Run or resume a persistent two-version artifact analysis | `rea investigate-versions` | | Map a local JavaScript/Electron application without executing it | `rea analyze PATH --approved` or `rea analyze-javascript-application` | | Reuse immutable analysis results without relaunching a provider | Pass `--snapshot /approved/path/analysis.json` to a deep-analysis command | @@ -276,7 +276,6 @@ Filesystem evidence commands and MCP file tools are disabled until the operator ```bash export REA_EVIDENCE_ROOTS_JSON='["/absolute/path/to/evidence"]' -export REA_INVESTIGATION_INPUT_ROOTS_JSON='["/absolute/path/to/releases"]' rea evidence-import /absolute/path/to/evidence/bundle.json rea evidence-export /absolute/path/to/evidence/bundle.json /absolute/path/to/evidence/canonical.json rea compare /absolute/path/to/evidence/left.json /absolute/path/to/evidence/right.json @@ -288,17 +287,10 @@ rea analyze-javascript-application /absolute/path/to/releases/app.asar --approve For a directory or `.asar`, generic `rea analyze` automatically selects the static JavaScript application provider when neither `--provider` nor `--snapshot` is supplied. The dedicated command remains available for explicit -format and resource-limit controls. Both routes require `--approved` and an -administrator-approved investigation input root. - -If REA is registered with an MCP client, run approved `rea setup` while the -explicit investigation-root variable is set, then restart that client. Setup -copies this non-secret policy into the managed registration; changing the shell -environment alone cannot update an already-running MCP process. +format and traversal controls. Both routes read the selected local input path. `investigate-versions` inventories both versions, checkpoints their observed Evidence, derives an artifact comparison, and records a changed-behavior report. -Both input paths must resolve beneath `REA_INVESTIGATION_INPUT_ROOTS_JSON`; workspace files remain independently restricted by `REA_EVIDENCE_ROOTS_JSON`. The workspace uses deterministic content identities and monotonic CAS-linked revisions, so the same request resumes an interrupted run or reuses a completed @@ -314,10 +306,10 @@ export REA_REFERENCE_ROOTS_JSON='["/absolute/path/to/source"]' rea import-reference-source /absolute/path/to/source ``` -Exports never replace an existing file unless `--overwrite` is explicit. Imports are size/depth bounded, validate every Evidence v2 ID and manifest, and never execute bundle content. +Exports never replace an existing file unless `--overwrite` is explicit. Imports are size/depth bounded, validate every Evidence ID and manifest, and never execute bundle content. Provider-neutral analysis snapshots persist successful, immutable REA calls and -their Evidence v2 records. They are exact caches rather than Hopper databases: +their Evidence records. They are exact caches rather than Hopper databases: REA reuses a v2 entry only when the binary digest, kind, format, architecture, operation parameters, concrete provider build, and canonical analysis-profile digest match. Hopper loader defaults and configured overrides are normalized by @@ -384,10 +376,10 @@ REA handles the app analysis in steps 1–5. The agent performs step 6 with its | Artifact graph | 3 | bounded provider-neutral inspection, deterministic directory/ZIP/APK/IPA/MSIX/AppX/ASAR inventory, and explicitly selected extraction into an absent owned tree | | Managed PE/CLI | 8 | PE/CLI identity, metadata members, CIL hashes, P/Invoke/native-boundary declarations and verification, application-graph projection, decompiler reconstruction import, token remapping, runtime-correlation plans, and version comparison | | Browser observation | 9 | exact-origin passive CDP capture, bundle and source-map analysis, WebMCP discovery, session timelines, capture diff, visual evidence, and bounded Playwright scenarios | -| Electron analysis | 5 | passive root-confined observation, bounded static application mapping, evidence-backed static/runtime reconciliation, and separately approved provider-owned click/wait scenarios | +| Electron analysis | 5 | passive root-confined observation, static application mapping, evidence-backed static/runtime reconciliation, and provider-owned click/wait scenarios | | JavaScript runtime | 2 | approved attach-only Node/Electron Inspector target discovery plus bounded script and execution-context observation without evaluation or instrumentation | | Application workflows | 12 | bounded cross-layer traces, unique-only version matching, historical-source to bundle mapping, static export return-shape comparison, approved Linux-isolated extracted-module replay, managed-runtime characterization, reconstruction coverage closure, deterministic obligation ledgers, and end-to-end readiness conformance | -| Workspace and observation | 23 | target lifecycle, Evidence v2 bundle snapshots, retained-bundle release, aggregate navigation/address context, direct finite replay-machine evaluation, process/artifact/function comparison, evidence-linked residual-unknown lifecycle | +| Workspace and observation | 22 | target lifecycle, inline Evidence bundle retrieval, aggregate navigation/address context, direct finite replay-machine evaluation, process/artifact/function comparison, evidence-linked residual-unknown lifecycle | 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. @@ -412,10 +404,10 @@ REA is already useful for native application, browser, and Electron investigatio - Traverse content-addressed artifact graphs without extraction; on macOS, read-only DMG traversal additionally requires `native_mount_approved: true` and `REA_ARTIFACT_NATIVE_MOUNT_ENABLED=true`. Materialize only approved occurrences into absent output roots. - Build bounded function dossiers with pseudocode, assembly, CFG edges, comments, calls, references, strings, and names. - Search and trace features across symbols, strings, metadata, references, and call paths. -- Record every successful result as deterministic Evidence v2 with artifact and provider identity, confidence, authority, limitations, and locations. +- Record every successful result as deterministic Evidence with artifact and provider identity, confidence, authority, limitations, and locations. - Export and import evidence bundles across sessions. - Persist automatic cross-version artifact runs as canonical, lock-protected workspaces with tamper-evident revision commitments. -- Capture approved PTY scenarios as Process Capture v4 Evidence, including committed run manifests, raw and rendered terminal frames, scripted interactions, descendant settlement, named filesystem checkpoints, deterministic command shims, and loopback HTTP/WebSocket exchanges. +- Capture approved PTY scenarios as Process Capture Evidence, including committed run manifests, raw and rendered terminal frames, scripted interactions, descendant settlement, named filesystem checkpoints, deterministic command shims, and loopback HTTP/WebSocket exchanges. - Validate finite replay machines without launching a target through `run_replay_machine` or `rea run-replay-machine`; ordered events return typed decisions, actions, captured aliases, transition journals, final state, and exact limit use without echoing request or captured values. - Compare complete artifact inventories by stable path, content, metadata, and relations; incomplete evidence never implies equivalence. - Compare explicit function dossiers across text, calls, references, strings, and address-normalized CFG topology with per-facet unknowns. @@ -443,7 +435,7 @@ rea list-browser-targets http://127.0.0.1:9222 --approved --json rea inspect-web-page http://127.0.0.1:9222 TARGET_ID --approved --json ``` -All eight browser tools expose the same Evidence v2 contracts over CLI and MCP. Inspection is passive: REA does not evaluate page JavaScript, navigate, click, close the page, or close the browser. Query values, credentials, cookies, authorization headers, storage values, and raw JSON or WebSocket values are never retained. Separately approved captures can retain bounded redacted console primitives, value-free JSON/WebSocket shapes, script sources, accessibility text, or screenshot pixels. Existing activity before attach is explicitly unavailable. See [Website observation with CDP](docs/browser-observation.md) for browser startup, schemas, limits, and the threat model. +All eight browser tools expose the same Evidence contracts over CLI and MCP. Inspection is passive: REA does not evaluate page JavaScript, navigate, click, close the page, or close the browser. Query values, credentials, cookies, authorization headers, storage values, and raw JSON or WebSocket values are never retained. Separately approved captures can retain bounded redacted console primitives, value-free JSON/WebSocket shapes, script sources, accessibility text, or screenshot pixels. Existing activity before attach is explicitly unavailable. See [Website observation with CDP](docs/browser-observation.md) for browser startup, schemas, limits, and the threat model. ### Controlled browser scenarios @@ -494,7 +486,7 @@ require/import edges, EventEmitter activity, Electron IPC, PID identity, and Electron role identity stay explicit unknowns. See [passive Node and Electron runtime observation](docs/javascript-runtime-observation.md). -Exact package, tool-family, provider, setup-client, public schema-version, and CLI facts are generated from source in [`docs/product-catalog.json`](docs/product-catalog.json). PR CI verifies this catalog, narrative documentation, generated schemas, and a clean TypeDoc render. +Exact package, tool-family, provider, setup-client, schema, and CLI facts are generated from source in [`docs/product-catalog.json`](docs/product-catalog.json). PR CI verifies this catalog, narrative documentation, generated schemas, and a clean TypeDoc render. ## Roadmap @@ -508,7 +500,7 @@ REA is growing into a toolkit for understanding software across static artifacts ### Next 1. **Controlled replay conformance growth** — extend the shipped Linux extracted-module sandbox with more source-owned hostile fixtures and cross-kernel conformance; browser and Electron scenarios remain separately permissioned authorities. -2. **Broader application graph evidence** — extend authenticated cross-layer traces with additional static extractors and separately approved runtime authorities. +2. **Broader application graph evidence** — extend authenticated cross-layer traces with additional static extractors and additional runtime authorities. 3. **Professional managed-code analysis** — extend shipped PE/CLI triage, CIL evidence, managed/native declaration inventory, source-owned conformance, and obfuscation-resistant comparisons toward verified native-provider composition under the accepted [managed-code boundary](docs/managed-code-analysis.md). 4. **Deterministic behavior harnesses** — extend process ownership, protocol fixtures, filesystem observation, reconnects, and cross-version behavioral comparison. @@ -587,7 +579,6 @@ The agent workflow above is the easiest way to use REA. For a one-off overview f ```bash npx -y rea-agents@latest analyze /Applications/Notes.app npx -y rea-agents@latest inspect /Applications/Notes.app -npx -y rea-agents@latest inspect /Applications/Notes.app --detail detailed --limit 20 npx -y rea-agents@latest search /Applications/Notes.app "offline" npx -y rea-agents@latest function /Applications/Notes.app 0x1000 npx -y rea-agents@latest xrefs /Applications/Notes.app 0x1000 @@ -600,7 +591,7 @@ npx -y rea-agents@latest providers Run `npx -y rea-agents@latest --help` for direct decompilation, bounded search and other options. `analyze` and `inspect` share the same overview workflow; -`function`, `xrefs`, and `trace` return the same Evidence v2 envelopes as MCP. +`function`, `xrefs`, and `trace` return the same Evidence envelopes as MCP. Or install the `rea` command globally: @@ -709,7 +700,7 @@ Set `REA_PROCESS_CAPTURE_AUTO_GRANT=false` to configure those process-capture limits as a ceiling without implicitly granting them. This mode remains fail-closed until a narrower grant is established. -Capture a scenario or compare two saved Process Capture v4 Evidence records: +Capture a scenario or compare two saved Process Capture Evidence records: ```bash rea capture-process ./scenario.json > authority.json @@ -719,7 +710,7 @@ 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 v4](docs/process-capture.md) for scenario +divergence. See [Process Capture](docs/process-capture.md) for scenario fields, command-shim replay, checkpoint triggers, limits, and safety behavior. REA installs a prebuilt PTY backend for supported macOS, Linux, and Windows @@ -803,7 +794,7 @@ natural MCP use, first-tool routing, repeated calls, actual Codex token usage, completion quality, and explicit treatment of authority and unknowns. `npm run evidence:generate` regenerates the managed conformance manifest and -Evidence v2 completion ledger from live verifier output. `npm run +Evidence completion ledger from live verifier output. `npm run evidence:check` reruns the verifier and fails when artifacts, scenarios, providers, schemas, claim counts, Evidence IDs, or the bundled skill have drifted. Unsupported claims remain explicit and never count as passes. diff --git a/README_ar.md b/README_ar.md index eb03754e0d..b47b84fa65 100644 --- a/README_ar.md +++ b/README_ar.md @@ -170,7 +170,7 @@ rea uninstall --purge-data | تحليل Electron | 5 | مراقبة سلبية ضمن جذور canonical، ورسم ثابت ومحدود للتطبيق، ومطابقة ثابتة/وقت تشغيل قائمة على Evidence | | وقت تشغيل JavaScript | 2 | اكتشاف أهداف Node/Electron Inspector المعتمدة للاتصال فقط، ومراقبة محدودة للبرامج النصية وسياقات التنفيذ دون تقييم أو تجهيز | | سير عمل التطبيقات | 12 | تتبع محدود ومقارنة إصدارات فريدة ومقارنة ثابتة لأشكال قيم إرجاع الصادرات وإعادة تشغيل وحدات معزولة ومعتمدة على Linux وتوصيف وقت التشغيل المُدار وإغلاق تغطية إعادة البناء ودفاتر التزامات حتمية والتحقق الشامل من جاهزية إعادة البناء | -| جلسة الملف التنفيذي | 23 | فتح الأهداف وحزم الأدلة وتحرير الحزم المحتفظ بها وتشغيل آلة إعادة محدودة ومقارنة العمليات والقطع والدوال وسجل المجهولات المتبقية | +| جلسة الملف التنفيذي | 22 | فتح الأهداف وحزم الأدلة وتشغيل آلة إعادة محدودة ومقارنة العمليات والقطع والدوال وسجل المجهولات المتبقية | ## استخدام REA مع وكلاء برمجة آخرين diff --git a/README_ja.md b/README_ja.md index 4ba596db58..4982317349 100644 --- a/README_ja.md +++ b/README_ja.md @@ -160,7 +160,7 @@ REA は手順 1〜5 のバイナリ解析を処理し、手順 6 はエージェ | Electron 解析 | 5 | canonical ファイルルート内の受動観察、有界な静的アプリマッピング、Evidence に基づく静的/実行時の照合 | | JavaScript ランタイム | 2 | 承認済みのアタッチ専用 Node/Electron Inspector ターゲット検出と、評価や計装を行わない有界なスクリプト/実行コンテキスト観察 | | アプリケーション | 12 | 有界なクロスレイヤー追跡、一意限定のバージョン比較、静的なエクスポート戻り値形状比較、承認済み Linux 隔離 extracted-module replay、マネージドランタイム特性評価、再構築カバレッジ閉包、決定論的な義務台帳、エンドツーエンドの準備適合性検証 | -| バイナリセッション | 23 | `open_binary`、`binary_session`、証拠バンドル、保持バンドルの解放、有限リプレイ状態機械、プロセス/成果物/関数比較、残余未知レジストリ | +| バイナリセッション | 22 | `open_binary`、`binary_session`、証拠バンドル、有限リプレイ状態機械、プロセス/成果物/関数比較、残余未知レジストリ | ## 他のコーディングエージェントで使う diff --git a/README_ko.md b/README_ko.md index 889f688b87..403d4caa32 100644 --- a/README_ko.md +++ b/README_ko.md @@ -160,7 +160,7 @@ REA는 1–5단계의 바이너리 분석을 처리합니다. 6단계는 에이 | Electron 분석 | 5 | canonical 파일 루트 내 수동 관찰, 제한된 정적 앱 매핑, Evidence 기반 정적/런타임 조정 | | JavaScript 런타임 | 2 | 승인된 연결 전용 Node/Electron Inspector 대상 탐색과 평가·계측 없는 제한된 스크립트 및 실행 컨텍스트 관찰 | | 애플리케이션 | 12 | 제한된 교차 계층 추적, 고유 일치 버전 비교, 정적 export 반환 형태 비교, 승인된 Linux 격리 extracted-module replay, 관리형 런타임 특성화, 재구성 커버리지 폐쇄, 결정론적 의무 원장, 엔드투엔드 준비 적합성 검증 | -| 바이너리 세션 | 23 | `open_binary`, `binary_session`, 증거 번들, 보존 번들 해제, 유한 replay 상태 머신, 프로세스·아티팩트·함수 비교, 잔여 미지수 레지스트리 | +| 바이너리 세션 | 22 | `open_binary`, `binary_session`, 증거 번들, 유한 replay 상태 머신, 프로세스·아티팩트·함수 비교, 잔여 미지수 레지스트리 | ## 다른 코딩 에이전트에서 사용하기 diff --git a/README_zh.md b/README_zh.md index ebdde2cbda..f5e134936f 100644 --- a/README_zh.md +++ b/README_zh.md @@ -160,7 +160,7 @@ REA 负责第 1–5 步中的二进制分析。第 6 步由智能体使用其常 | Electron 分析 | 5 | 限定 canonical 文件根的被动观察、有界静态应用映射,以及基于 Evidence 的静态/运行时对账 | | JavaScript 运行时 | 2 | 经批准的只附加 Node/Electron Inspector 目标发现,以及不执行求值或插桩的有界脚本和执行上下文观察 | | 应用工作流 | 12 | 有界跨层追踪、唯一匹配跨版本图比较、静态导出返回形状比较、经批准的 Linux 隔离 extracted-module replay、托管运行时表征、重建覆盖闭合、确定性义务账本和端到端就绪性一致性验证 | -| 二进制会话 | 23 | `open_binary`、`binary_session`、证据包、保留包释放、有限重放状态机、进程、制品与函数比较、残余未知项注册表 | +| 二进制会话 | 22 | `open_binary`、`binary_session`、证据包、有限重放状态机、进程、制品与函数比较、残余未知项注册表 | ## 与其他编程智能体一起使用 diff --git a/bridge/ghidra/ReaGhidraBridge.java b/bridge/ghidra/ReaGhidraBridge.java index fe9a2c7734..8b9ae17700 100644 --- a/bridge/ghidra/ReaGhidraBridge.java +++ b/bridge/ghidra/ReaGhidraBridge.java @@ -83,21 +83,12 @@ public final class ReaGhidraBridge extends HeadlessScript { private static final int MAX_RESPONSE_BYTES = 1024 * 1024; private static final int RESPONSE_ENVELOPE_RESERVE_BYTES = 32 * 1024; private static final int MAX_NATIVE_API_RESPONSE_BYTES = 192 * 1024; - private static final int MAX_INVENTORY_ITEMS = 1_000_000; - private static final int MAX_FUNCTION_ITEMS = 100_000; - private static final int MAX_FUNCTION_INSTRUCTIONS = 100_000; private static final int MAX_NATIVE_API_PARAMETERS = 64; private static final int MAX_NATIVE_API_JUMP_TABLES = 4; private static final int MAX_NATIVE_API_LOAD_TABLES = 4; private static final int MAX_NATIVE_API_MAPPINGS = 32; private static final int DECOMPILE_TIMEOUT_SECONDS = 30; private static final int DECOMPILE_PAYLOAD_MBYTES = 8; - private static final int MAX_LIST_VALUE_CODE_POINTS = 1_024; - private static final int MAX_SEARCH_VALUE_CODE_POINTS = 4_096; - private static final int MAX_REGEX_CANDIDATE_CHARACTERS = 4_096; - private static final long MAX_REGEX_BACKTRACKING_PATHS = 10_000; - private static final long MAX_LITERAL_SEARCH_WORK_UNITS = 1_000_000; - private static final long MAX_REGEX_SEARCH_WORK_UNITS = 1_000_000; private static final Gson GSON = new GsonBuilder().serializeNulls().create(); private static final Set DESCRIPTOR_KEYS = Set.of( "schema_version", @@ -375,7 +366,7 @@ public final class ReaGhidraBridge extends HeadlessScript { DecompileOptions options = new DecompileOptions(); options.setDefaultTimeout(DECOMPILE_TIMEOUT_SECONDS); options.setMaxPayloadMBytes(DECOMPILE_PAYLOAD_MBYTES); - options.setMaxInstructions(MAX_FUNCTION_INSTRUCTIONS); + options.setMaxInstructions(Integer.MAX_VALUE); decompiler = new DecompInterface(); decompiler.setOptions(options); decompiler.toggleCCode(true); @@ -398,43 +389,19 @@ public final class ReaGhidraBridge extends HeadlessScript { requireKeys(params, Set.of("document", "procedure")); requireDocument(params); Function function = resolveProcedure(requireString(params, "procedure")); - InstructionScan scan = scanInstructions(function, MAX_FUNCTION_INSTRUCTIONS); - if (scan.truncated) { - throw functionLimit("Procedure assembly exceeds the 100000-instruction limit"); - } + InstructionScan scan = scanInstructions(function, Integer.MAX_VALUE); return GSON.toJsonTree(renderAssembly(scan.instructions)); } private JsonObject readFunctionInstructions(JsonObject params) throws Exception { - requireKeys(params, Set.of("document", "procedure", "offset", "limit")); + requireKeys(params, Set.of("document", "procedure")); requireDocument(params); Function function = resolveProcedure(requireString(params, "procedure")); - int offset = requireBoundedInteger(params, "offset", 0, 100_000); - int limit = requireBoundedInteger(params, "limit", 1, 500); - InstructionScan scan = scanInstructions(function, offset + limit + 1); - int start = Math.min(offset, scan.instructions.size()); - int end = Math.min(scan.instructions.size(), start + limit); + InstructionScan scan = scanInstructions(function, Integer.MAX_VALUE); JsonArray items = new JsonArray(); - for (String line : renderAssemblyLines(scan.instructions.subList(start, end))) { + for (String line : renderAssemblyLines(scan.instructions)) { items.add(line); } - boolean hasMore = scan.truncated || end < scan.instructions.size(); - JsonObject instructions = new JsonObject(); - instructions.add("items", items); - if (scan.truncated) { - instructions.add("total", JsonNull.INSTANCE); - } - else { - instructions.addProperty("total", scan.instructions.size()); - } - instructions.addProperty("returned", items.size()); - instructions.addProperty("truncated", hasMore); - if (hasMore) { - instructions.addProperty("next_offset", end); - } - else { - instructions.add("next_offset", JsonNull.INSTANCE); - } JsonArray limitations = new JsonArray(); limitations.add("Instruction text and ordering are Ghidra-specific representations."); @@ -443,9 +410,7 @@ public final class ReaGhidraBridge extends HeadlessScript { ); JsonObject result = new JsonObject(); result.add("procedure", procedureIdentity(function)); - result.add("instructions", instructions); - result.addProperty("instructions_scanned", scan.instructions.size()); - result.addProperty("instruction_scan_truncated", scan.truncated); + result.add("instructions", items); result.add("limitations", limitations); return result; } @@ -457,9 +422,6 @@ public final class ReaGhidraBridge extends HeadlessScript { Set observed = callers ? function.getCallingFunctions(monitor) : function.getCalledFunctions(monitor); - if (observed.size() > MAX_FUNCTION_ITEMS) { - throw functionLimit("Resolved call set exceeds the 100000-item limit"); - } List ordered = new ArrayList<>(observed); ordered.sort(Comparator.comparing(Function::getEntryPoint)); JsonArray result = new JsonArray(); @@ -490,10 +452,7 @@ public final class ReaGhidraBridge extends HeadlessScript { Set.of( "document", "procedure", - "direction", - "offset", - "limit", - "max_instructions" + "direction" ) ); requireDocument(params); @@ -502,10 +461,7 @@ public final class ReaGhidraBridge extends HeadlessScript { if (!direction.equals("incoming") && !direction.equals("outgoing")) { throw new RequestFailure("invalid_request", "direction must be incoming or outgoing"); } - int offset = requireBoundedInteger(params, "offset", 0, Integer.MAX_VALUE); - int limit = requireBoundedInteger(params, "limit", 1, 500); - int maximum = requireBoundedInteger(params, "max_instructions", 1, 5_000); - InstructionScan scan = scanInstructions(function, maximum); + InstructionScan scan = scanInstructions(function, Integer.MAX_VALUE); List references = collectReferences(scan.instructions, direction); JsonArray edges = new JsonArray(); for (Reference reference : references) { @@ -514,9 +470,7 @@ public final class ReaGhidraBridge extends HeadlessScript { JsonObject result = new JsonObject(); result.add("procedure", procedureIdentity(function)); result.addProperty("direction", direction); - result.add("references", bounded(edges, offset, limit, !scan.truncated)); - result.addProperty("instructions_scanned", scan.instructions.size()); - result.addProperty("instruction_scan_truncated", scan.truncated); + result.add("references", edges); return result; } @@ -533,10 +487,7 @@ public final class ReaGhidraBridge extends HeadlessScript { continue; } sources.add(reference.getFromAddress()); - if (sources.size() > MAX_FUNCTION_ITEMS) { - throw functionLimit("Cross-reference set exceeds the 100000-item limit"); } - } List
ordered = new ArrayList<>(sources); ordered.sort(Address::compareTo); JsonArray result = new JsonArray(); @@ -547,48 +498,9 @@ public final class ReaGhidraBridge extends HeadlessScript { } private JsonObject analyzeFunction(JsonObject params) throws Exception { - requireKeys( - params, - Set.of( - "procedure", - "include_assembly", - "limit", - "max_pseudocode_chars", - "max_instructions", - "pseudocode_offset", - "assembly_offset", - "collection_offset" - ) - ); + requireKeys(params, Set.of("procedure")); Function function = resolveProcedure(requireString(params, "procedure")); - boolean includeAssembly = requireBoolean(params, "include_assembly"); - int limit = requireBoundedInteger(params, "limit", 1, 500); - int maximumCharacters = requireBoundedInteger( - params, - "max_pseudocode_chars", - 1, - 100_000 - ); - int maximumInstructions = requireBoundedInteger( - params, - "max_instructions", - 1, - 5_000 - ); - int pseudocodeOffset = requireBoundedInteger( - params, - "pseudocode_offset", - 0, - Integer.MAX_VALUE - ); - int assemblyOffset = requireBoundedInteger( - params, - "assembly_offset", - 0, - Integer.MAX_VALUE - ); - JsonObject offsets = requireCollectionOffsets(params); - InstructionScan scan = scanInstructions(function, maximumInstructions); + InstructionScan scan = scanInstructions(function, Integer.MAX_VALUE); DecompileResults decompilation = decompile(function); String pseudocode = decompiledText(decompilation); if (pseudocode == null) { @@ -607,75 +519,24 @@ public final class ReaGhidraBridge extends HeadlessScript { JsonArray referencedStrings = referencedStrings(outgoingReferences); JsonArray referencedNames = referencedNames(outgoingReferences); JsonArray blocks = basicBlockValues(function); - JsonArray assembly = includeAssembly - ? GSON.toJsonTree(renderAssemblyLines(scan.instructions)).getAsJsonArray() - : new JsonArray(); + JsonArray assembly = GSON.toJsonTree(renderAssemblyLines(scan.instructions)) + .getAsJsonArray(); JsonObject procedure = procedureIdentity(function); procedure.addProperty("signature", function.getPrototypeString(false, true)); procedure.add("locals", functionLocals(function)); JsonObject result = new JsonObject(); result.add("procedure", procedure); - result.add( - "pseudocode", - pseudocodePage(pseudocode, pseudocodeOffset, maximumCharacters) - ); - result.add( - "assembly", - includeAssembly - ? bounded(assembly, assemblyOffset, maximumInstructions, !scan.truncated) - : bounded(assembly, 0, maximumInstructions, true) - ); - result.add( - "comments", - bounded(comments, collectionOffset(offsets, "comments"), limit, !scan.truncated) - ); - result.add("callers", bounded(callers, collectionOffset(offsets, "callers"), limit, true)); - result.add("callees", bounded(callees, collectionOffset(offsets, "callees"), limit, true)); - result.add( - "incoming_references", - bounded( - incoming, - collectionOffset(offsets, "incoming_references"), - limit, - !scan.truncated - ) - ); - result.add( - "outgoing_references", - bounded( - outgoing, - collectionOffset(offsets, "outgoing_references"), - limit, - !scan.truncated - ) - ); - result.add( - "referenced_strings", - bounded( - referencedStrings, - collectionOffset(offsets, "referenced_strings"), - limit, - !scan.truncated - ) - ); - result.add( - "referenced_names", - bounded( - referencedNames, - collectionOffset(offsets, "referenced_names"), - limit, - !scan.truncated - ) - ); - result.add( - "basic_blocks", - bounded(blocks, collectionOffset(offsets, "basic_blocks"), limit, true) - ); - JsonObject instructionScan = new JsonObject(); - instructionScan.addProperty("scanned", scan.instructions.size()); - instructionScan.addProperty("truncated", scan.truncated); - result.add("instruction_scan", instructionScan); + result.addProperty("pseudocode", pseudocode); + result.add("assembly", assembly); + result.add("comments", comments); + result.add("callers", callers); + result.add("callees", callees); + result.add("incoming_references", incoming); + result.add("outgoing_references", outgoing); + result.add("referenced_strings", referencedStrings); + result.add("referenced_names", referencedNames); + result.add("basic_blocks", blocks); int nativeApiBudget = Math.min( MAX_NATIVE_API_RESPONSE_BYTES, Math.max( @@ -721,8 +582,8 @@ public final class ReaGhidraBridge extends HeadlessScript { return result; } - private JsonObject listNames(JsonObject params) throws Exception { - requireKeys(params, Set.of("document", "address", "offset", "limit")); + private JsonArray listNames(JsonObject params) throws Exception { + requireKeys(params, Set.of("document", "address")); requireDocument(params); List inventory = names(); String requested = optionalString(params, "address"); @@ -732,26 +593,16 @@ public final class ReaGhidraBridge extends HeadlessScript { .filter(item -> item.address.equals(address)) .toList(); } - return page( - inventory, - requireBoundedInteger(params, "offset", 0, Integer.MAX_VALUE), - requireBoundedInteger(params, "limit", 1, 500), - "symbol" - ); + return inventory(inventory, "symbol"); } - private JsonObject listProcedures(JsonObject params) throws Exception { - requireKeys(params, Set.of("document", "offset", "limit")); + private JsonArray listProcedures(JsonObject params) throws Exception { + requireKeys(params, Set.of("document")); requireDocument(params); List inventory = procedures().stream() .map(FunctionEntry::item) .toList(); - return page( - inventory, - requireBoundedInteger(params, "offset", 0, Integer.MAX_VALUE), - requireBoundedInteger(params, "limit", 1, 500), - "procedure" - ); + return inventory(inventory, "procedure"); } private JsonArray listSegments(JsonObject params) { @@ -760,9 +611,6 @@ public final class ReaGhidraBridge extends HeadlessScript { JsonArray result = new JsonArray(); String imageBase = canonicalAddress(currentProgram.getImageBase()); MemoryBlock[] blocks = currentProgram.getMemory().getBlocks(); - if (blocks.length > MAX_INVENTORY_ITEMS) { - throw inventoryLimit(); - } List ordered = new ArrayList<>(List.of(blocks)); ordered.sort(Comparator.comparing(MemoryBlock::getStart)); for (MemoryBlock block : ordered) { @@ -773,8 +621,8 @@ public final class ReaGhidraBridge extends HeadlessScript { return result; } - private JsonObject listStrings(JsonObject params) throws Exception { - requireKeys(params, Set.of("document", "address", "offset", "limit")); + private JsonArray listStrings(JsonObject params) throws Exception { + requireKeys(params, Set.of("document", "address")); requireDocument(params); List inventory = strings(); String requested = optionalString(params, "address"); @@ -784,12 +632,7 @@ public final class ReaGhidraBridge extends HeadlessScript { .filter(item -> item.address.equals(address)) .toList(); } - return page( - inventory, - requireBoundedInteger(params, "offset", 0, Integer.MAX_VALUE), - requireBoundedInteger(params, "limit", 1, 500), - "string" - ); + return inventory(inventory, "string"); } private JsonElement procedureAddress(JsonObject params) throws Exception { @@ -823,23 +666,15 @@ public final class ReaGhidraBridge extends HeadlessScript { private JsonObject search(JsonObject params, boolean procedureSearch) throws Exception { requireKeys( params, - Set.of("pattern", "mode", "case_sensitive", "offset", "limit", "document") + Set.of("pattern", "mode", "case_sensitive", "document") ); requireDocument(params); String expression = requireString(params, "pattern"); - if (expression.codePointCount(0, expression.length()) > 256) { - throw new RequestFailure( - "invalid_request", - "pattern must contain between 1 and 256 characters" - ); - } String mode = requireString(params, "mode"); if (!mode.equals("literal") && !mode.equals("regex")) { throw new RequestFailure("invalid_request", "mode must be literal or regex"); } boolean caseSensitive = requireBoolean(params, "case_sensitive"); - int offset = requireBoundedInteger(params, "offset", 0, Integer.MAX_VALUE); - int limit = requireBoundedInteger(params, "limit", 1, 100); List inventory = procedureSearch ? procedures().stream().map(FunctionEntry::item).toList() : strings(); @@ -847,18 +682,13 @@ public final class ReaGhidraBridge extends HeadlessScript { ? literalMatcher(expression, caseSensitive) : regexMatcher(expression, caseSensitive); JsonArray items = new JsonArray(); - int total = 0; - long pageEnd = (long) offset + limit; for (InventoryItem item : inventory) { if (!matcher.matches(item.value)) { continue; } - if (total >= offset && total < pageEnd) { - items.add(resultItem(item, null, MAX_SEARCH_VALUE_CODE_POINTS)); - } - total += 1; + items.add(resultItem(item, null)); } - return pageResult(items, offset, limit, total); + return items; } private List names() throws Exception { @@ -929,9 +759,6 @@ public final class ReaGhidraBridge extends HeadlessScript { symbol == null ? function.getName() : symbol.getName(true), facts ); - if (destination.size() >= MAX_INVENTORY_ITEMS) { - throw inventoryLimit(); - } destination.add(new FunctionEntry(function, item)); } } @@ -1540,9 +1367,6 @@ public final class ReaGhidraBridge extends HeadlessScript { reference.getOperandIndex() + "\u0000" + reference.isPrimary(); observed.putIfAbsent(key, reference); - if (observed.size() > MAX_FUNCTION_ITEMS) { - throw functionLimit("Reference set exceeds the 100000-item limit"); - } } private JsonArray referenceEdges(List references) { @@ -1623,9 +1447,6 @@ public final class ReaGhidraBridge extends HeadlessScript { private static JsonArray functionLocals(Function function) { Variable[] variables = function.getLocalVariables(); - if (variables.length > MAX_FUNCTION_ITEMS) { - throw functionLimit("Local-variable set exceeds the 100000-item limit"); - } List ordered = new ArrayList<>(List.of(variables)); ordered.sort( Comparator.comparing(Variable::getName) @@ -1646,9 +1467,6 @@ public final class ReaGhidraBridge extends HeadlessScript { } private JsonArray procedureIdentities(Set functions) { - if (functions.size() > MAX_FUNCTION_ITEMS) { - throw functionLimit("Resolved call set exceeds the 100000-item limit"); - } List ordered = new ArrayList<>(functions); ordered.sort(Comparator.comparing(Function::getEntryPoint)); JsonArray result = new JsonArray(); @@ -1664,9 +1482,6 @@ public final class ReaGhidraBridge extends HeadlessScript { List result = new ArrayList<>(); while (iterator.hasNext()) { monitor.checkCancelled(); - if (result.size() >= MAX_FUNCTION_ITEMS) { - throw functionLimit("Basic-block set exceeds the 100000-item limit"); - } result.add(iterator.next()); } result.sort(Comparator.comparing(CodeBlock::getFirstStartAddress)); @@ -1723,10 +1538,7 @@ public final class ReaGhidraBridge extends HeadlessScript { String key = canonicalAddress(instruction.getAddress()) + "\u0000" + kind + "\u0000" + type.name() + "\u0000" + text; observed.put(key, item); - if (observed.size() > MAX_FUNCTION_ITEMS) { - throw functionLimit("Comment set exceeds the 100000-item limit"); - } - } + } } JsonArray result = new JsonArray(); observed.values().forEach(result::add); @@ -1753,10 +1565,7 @@ public final class ReaGhidraBridge extends HeadlessScript { String key = canonicalAddress(data.getAddress()) + "\u0000" + value + "\u0000" + canonicalAddress(reference.getFromAddress()); observed.put(key, item); - if (observed.size() > MAX_FUNCTION_ITEMS) { - throw functionLimit("Referenced-string set exceeds the 100000-item limit"); } - } JsonArray result = new JsonArray(); observed.values().forEach(result::add); return result; @@ -1778,36 +1587,12 @@ public final class ReaGhidraBridge extends HeadlessScript { String key = canonicalAddress(reference.getToAddress()) + "\u0000" + symbol.getName(true) + "\u0000" + canonicalAddress(reference.getFromAddress()); observed.put(key, item); - if (observed.size() > MAX_FUNCTION_ITEMS) { - throw functionLimit("Referenced-name set exceeds the 100000-item limit"); } - } JsonArray result = new JsonArray(); observed.values().forEach(result::add); return result; } - private static JsonObject pseudocodePage(String value, int offset, int limit) { - int total = value.codePointCount(0, value.length()); - int start = Math.min(offset, total); - int returned = Math.min(limit, total - start); - int startIndex = value.offsetByCodePoints(0, start); - int endIndex = value.offsetByCodePoints(startIndex, returned); - int next = start + returned; - JsonObject result = new JsonObject(); - result.addProperty("text", value.substring(startIndex, endIndex)); - result.addProperty("total_chars", total); - result.addProperty("returned_chars", returned); - result.addProperty("truncated", next < total); - if (next < total) { - result.addProperty("next_offset", next); - } - else { - result.add("next_offset", JsonNull.INSTANCE); - } - return result; - } - private static JsonObject bounded( JsonArray values, int offset, @@ -1839,35 +1624,6 @@ public final class ReaGhidraBridge extends HeadlessScript { return result; } - private static JsonObject requireCollectionOffsets(JsonObject params) { - JsonElement value = params.get("collection_offset"); - if (value == null || !value.isJsonObject()) { - throw new RequestFailure("invalid_request", "collection_offset must be an object"); - } - JsonObject result = value.getAsJsonObject(); - requireKeys( - result, - Set.of( - "comments", - "callers", - "callees", - "incoming_references", - "outgoing_references", - "referenced_strings", - "referenced_names", - "basic_blocks" - ) - ); - for (String name : result.keySet()) { - requireBoundedInteger(result, name, 0, Integer.MAX_VALUE); - } - return result; - } - - private static int collectionOffset(JsonObject offsets, String name) { - return requireBoundedInteger(offsets, name, 0, Integer.MAX_VALUE); - } - private static String exclusiveAddress(Address inclusive) { Address next = inclusive.next(); if (next != null && next.getAddressSpace().equals(inclusive.getAddressSpace())) { @@ -1884,51 +1640,21 @@ public final class ReaGhidraBridge extends HeadlessScript { return truncate(value.replaceAll("[\\r\\n]+", " "), 512).value; } - private static RequestFailure functionLimit(String message) { - return new RequestFailure("limit_exceeded", message); - } - - private JsonObject page( - List inventory, - int offset, - int limit, - String factsName) { - int start = Math.min(offset, inventory.size()); - int end = Math.min(inventory.size(), start + limit); - JsonArray items = new JsonArray(); - for (int index = start; index < end; index += 1) { - items.add(resultItem(inventory.get(index), factsName, MAX_LIST_VALUE_CODE_POINTS)); + private JsonArray inventory( + List inventory, + String factsName) { + JsonArray result = new JsonArray(); + for (InventoryItem item : inventory) { + monitor.checkCancelled(); + result.add(resultItem(item, factsName)); } - return pageResult(items, offset, limit, inventory.size()); - } - - private static JsonObject pageResult(JsonArray items, int offset, int limit, int total) { - int next = offset + items.size(); - boolean hasMore = next < total; - JsonObject result = new JsonObject(); - result.add("items", items); - result.addProperty("offset", offset); - result.addProperty("limit", limit); - result.addProperty("total", total); - if (hasMore) { - result.addProperty("next_offset", next); - } - else { - result.add("next_offset", JsonNull.INSTANCE); - } - result.addProperty("has_more", hasMore); return result; } - private static JsonObject resultItem( - InventoryItem item, - String factsName, - int maximumCodePoints) { - TruncatedValue truncated = truncate(item.value, maximumCodePoints); + private static JsonObject resultItem(InventoryItem item, String factsName) { JsonObject result = new JsonObject(); result.addProperty("address", canonicalAddress(item.address)); - result.addProperty("value", truncated.value); - result.addProperty("value_truncated", truncated.truncated); + result.addProperty("value", item.value); if (factsName != null) { result.add(factsName, item.facts.deepCopy()); } @@ -2089,19 +1815,9 @@ public final class ReaGhidraBridge extends HeadlessScript { } private static void addBounded(List destination, InventoryItem item) { - if (destination.size() >= MAX_INVENTORY_ITEMS) { - throw inventoryLimit(); - } destination.add(item); } - private static RequestFailure inventoryLimit() { - return new RequestFailure( - "limit_exceeded", - "Ghidra inventory exceeds the 1000000-item safety limit" - ); - } - private static TruncatedValue truncate(String value, int maximumCodePoints) { int codePoints = value.codePointCount(0, value.length()); if (codePoints <= maximumCodePoints) { @@ -2113,30 +1829,15 @@ public final class ReaGhidraBridge extends HeadlessScript { private static ValueMatcher literalMatcher(String pattern, boolean caseSensitive) { String needle = caseSensitive ? pattern : pattern.toLowerCase(Locale.ROOT); - return new ValueMatcher() { - private long remaining = MAX_LITERAL_SEARCH_WORK_UNITS; - - @Override - public boolean matches(String value) { - long required = (long) Math.max(value.length(), 1) + needle.length(); - if (required > remaining) { - throw new RequestFailure( - "limit_exceeded", - "Literal search exceeds the 1000000-unit work budget" - ); - } - remaining -= required; - String candidate = caseSensitive ? value : value.toLowerCase(Locale.ROOT); - return candidate.contains(needle); - } + return value -> { + String candidate = caseSensitive ? value : value.toLowerCase(Locale.ROOT); + return candidate.contains(needle); }; } private static ValueMatcher regexMatcher(String expression, boolean caseSensitive) { - RegexMetrics metrics; Pattern pattern; try { - metrics = new BoundedRegexParser(expression).parse(); pattern = Pattern.compile( expression, caseSensitive ? 0 : Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE @@ -2145,29 +1846,7 @@ public final class ReaGhidraBridge extends HeadlessScript { catch (PatternSyntaxException exception) { throw new RequestFailure("invalid_request", "Invalid regex pattern"); } - long workPerCharacter = metrics.paths * Math.max(metrics.steps, 1); - return new ValueMatcher() { - private long remaining = MAX_REGEX_SEARCH_WORK_UNITS; - - @Override - public boolean matches(String value) { - if (value.length() > MAX_REGEX_CANDIDATE_CHARACTERS) { - throw new RequestFailure( - "limit_exceeded", - "Regex candidate exceeds the 4096-character safety limit" - ); - } - long required = workPerCharacter * Math.max(value.length(), 1); - if (required > remaining) { - throw new RequestFailure( - "limit_exceeded", - "Regex search exceeds the 1000000-unit work budget" - ); - } - remaining -= required; - return pattern.matcher(value).find(); - } - }; + return value -> pattern.matcher(value).find(); } private static SessionDescriptor readDescriptor(Path path) throws IOException { @@ -2407,7 +2086,6 @@ public final class ReaGhidraBridge extends HeadlessScript { String profileDigest ) {} private record Request(int id, String method, JsonObject params) {} - private record RegexMetrics(long paths, long steps, boolean containsRepeat) {} private static final class RequestFailure extends RuntimeException { private final String code; @@ -2418,263 +2096,4 @@ public final class ReaGhidraBridge extends HeadlessScript { } } - private static final class BoundedRegexParser { - private final String expression; - private int index; - - BoundedRegexParser(String expression) { - this.expression = expression; - } - - RegexMetrics parse() { - RegexMetrics result = parseExpression(false); - if (index != expression.length()) { - throw invalidRegex(); - } - return result; - } - - private RegexMetrics parseExpression(boolean grouped) { - RegexMetrics result = parseSequence(grouped); - while (peek('|')) { - index += 1; - RegexMetrics branch = parseSequence(grouped); - result = new RegexMetrics( - checkedPaths(result.paths, branch.paths, false), - Math.max(result.steps, branch.steps), - result.containsRepeat || branch.containsRepeat - ); - } - return result; - } - - private RegexMetrics parseSequence(boolean grouped) { - RegexMetrics result = new RegexMetrics(1, 0, false); - while (index < expression.length() && !peek('|') && !(grouped && peek(')'))) { - RegexMetrics item = parseAtom(); - result = new RegexMetrics( - checkedPaths(result.paths, item.paths, true), - result.steps + item.steps, - result.containsRepeat || item.containsRepeat - ); - } - return result; - } - - private RegexMetrics parseAtom() { - if (index >= expression.length()) { - throw invalidRegex(); - } - char item = expression.charAt(index++); - RegexMetrics atom; - if (item == '(') { - if (peek('?')) { - if (index + 1 >= expression.length() || expression.charAt(index + 1) != ':') { - throw new RequestFailure( - "invalid_request", - "Regex lookarounds and backreferences are not supported" - ); - } - index += 2; - } - atom = parseExpression(true); - if (!peek(')')) { - throw invalidRegex(); - } - index += 1; - } - else if (item == '[') { - consumeCharacterClass(); - atom = leaf(); - } - else if (item == '\\') { - consumeEscape(); - atom = leaf(); - } - else if (item == '*' || item == '+') { - throw unboundedRepeat(); - } - else if (item == '?' || item == '{' || item == '}' || item == ')') { - throw invalidRegex(); - } - else { - atom = leaf(); - } - if (index >= expression.length()) { - return atom; - } - if (peek('*') || peek('+')) { - throw unboundedRepeat(); - } - int minimum; - int maximum; - if (peek('?')) { - index += 1; - minimum = 0; - maximum = 1; - } - else if (peek('{')) { - int[] bounds = consumeBounds(); - minimum = bounds[0]; - maximum = bounds[1]; - } - else { - return atom; - } - if (atom.containsRepeat) { - throw new RequestFailure( - "invalid_request", - "Nested regex repetitions are not supported" - ); - } - if (maximum > 1_000) { - throw unboundedRepeat(); - } - return new RegexMetrics( - repeatPaths(atom.paths, minimum, maximum), - maximum * atom.steps, - true - ); - } - - private void consumeCharacterClass() { - boolean escaped = false; - boolean hasContent = false; - while (index < expression.length()) { - char item = expression.charAt(index++); - if (escaped) { - escaped = false; - hasContent = true; - } - else if (item == '\\') { - escaped = true; - } - else if (item == ']' && hasContent) { - return; - } - else { - hasContent = true; - } - } - throw invalidRegex(); - } - - private void consumeEscape() { - if (index >= expression.length()) { - throw invalidRegex(); - } - char escaped = expression.charAt(index++); - if (Character.isDigit(escaped) || escaped == 'k') { - throw new RequestFailure( - "invalid_request", - "Regex lookarounds and backreferences are not supported" - ); - } - if (escaped == 'Q' || escaped == 'E' || escaped == 'p' || escaped == 'P') { - throw new RequestFailure( - "invalid_request", - "Regex operation is not supported by the bounded matcher" - ); - } - if (escaped == 'x') { - consumeHexDigits(2); - } - else if (escaped == 'u') { - consumeHexDigits(4); - } - } - - private void consumeHexDigits(int count) { - if (index + count > expression.length()) { - throw invalidRegex(); - } - for (int current = 0; current < count; current += 1) { - if (Character.digit(expression.charAt(index + current), 16) < 0) { - throw invalidRegex(); - } - } - index += count; - } - - private int[] consumeBounds() { - index += 1; - int minimum = consumeDecimal(); - int maximum = minimum; - if (peek(',')) { - index += 1; - if (peek('}')) { - throw unboundedRepeat(); - } - maximum = consumeDecimal(); - } - if (!peek('}') || minimum > maximum) { - throw invalidRegex(); - } - index += 1; - return new int[] { minimum, maximum }; - } - - private int consumeDecimal() { - int start = index; - long value = 0; - while (index < expression.length() && Character.isDigit(expression.charAt(index))) { - value = value * 10 + Character.digit(expression.charAt(index), 10); - if (value > Integer.MAX_VALUE) { - throw unboundedRepeat(); - } - index += 1; - } - if (index == start) { - throw invalidRegex(); - } - return (int) value; - } - - private boolean peek(char expected) { - return index < expression.length() && expression.charAt(index) == expected; - } - - private static RegexMetrics leaf() { - return new RegexMetrics(1, 1, false); - } - - private static long repeatPaths(long childPaths, int minimum, int maximum) { - long result = 0; - long repeated = 1; - for (int count = 0; count <= maximum; count += 1) { - if (count >= minimum) { - result = checkedPaths(result, repeated, false); - } - if (count < maximum) { - repeated = checkedPaths(repeated, childPaths, true); - } - } - return result; - } - - private static long checkedPaths(long left, long right, boolean multiply) { - boolean exceeded = multiply - ? right != 0 && left > MAX_REGEX_BACKTRACKING_PATHS / right - : left > MAX_REGEX_BACKTRACKING_PATHS - right; - long result = multiply ? left * right : left + right; - if (exceeded || result > MAX_REGEX_BACKTRACKING_PATHS) { - throw new RequestFailure( - "invalid_request", - "Regex exceeds the 10000-path backtracking budget" - ); - } - return result; - } - - private static RequestFailure unboundedRepeat() { - return new RequestFailure( - "invalid_request", - "Unbounded or excessive regex repetitions are not supported" - ); - } - - private static RequestFailure invalidRegex() { - return new RequestFailure("invalid_request", "Invalid regex pattern"); - } - } } diff --git a/bridge/hopper_bridge.py b/bridge/hopper_bridge.py index 91084d4a9c..ee6261b339 100644 --- a/bridge/hopper_bridge.py +++ b/bridge/hopper_bridge.py @@ -9,7 +9,6 @@ import json import hmac import os import re -import sre_parse import socket from typing import Any, Optional, Protocol, Sequence @@ -17,11 +16,10 @@ MAX_LINE_BYTES = 10 * 1024 * 1024 MAX_READ_BYTES = 4096 BAD_ADDRESSES = (-1, 0xFFFFFFFFFFFFFFFF, None) _selected_document = None +_rea_session_document = None _search_inventory_cache = {} _pseudocode_cache = {} _hopper_api = None -MAX_SEARCH_PATTERN_LENGTH = 256 -MAX_SEARCH_VALUE_LENGTH = 4096 class HopperDocument(Protocol): @@ -69,8 +67,9 @@ class HopperApiFacade: def _configure_hopper_api(document_provider): """Inject Hopper's document provider or a standalone test facade.""" - global _hopper_api + global _hopper_api, _rea_session_document _hopper_api = HopperApiFacade(document_provider) + _rea_session_document = None def _api(): @@ -88,21 +87,45 @@ def _api(): def _session_document(): - """Find only the document opened for this authenticated REA session.""" + """Return the exact document bound to this authenticated REA session.""" + global _rea_session_document + documents = _api().documents() + if _rea_session_document is not None: + return ( + _rea_session_document + if any(document is _rea_session_document for document in documents) + else None + ) + return _bind_session_document(documents) + + +def _bind_session_document(documents=None): + """Bind this bridge to Hopper's current document for its target.""" + global _rea_session_document + api = _api() + if documents is None: + documents = api.documents() target = os.path.realpath(REA_TARGET_PATH) - for document in _api().documents(): + + def matches_target(document): paths = (document.getExecutableFilePath(), document.getDatabaseFilePath()) - for path in paths: - if path and os.path.realpath(path) == target: - return document + return any(path and os.path.realpath(path) == target for path in paths) + + current = api.current_document() + if current is not None and matches_target(current): + _rea_session_document = current + return current + matching = [document for document in documents if matches_target(document)] + if len(matching) == 1: + _rea_session_document = matching[0] + return matching[0] + if len(matching) > 1: + raise CapabilityUnavailableError( + "The REA session document is ambiguous; Hopper did not identify the launched document" + ) return None -MAX_REGEX_BACKTRACKING_PATHS = 10000 -MAX_REGEX_CANDIDATE_LENGTH = 4096 -MAX_REGEX_SEARCH_WORK_UNITS = 1000000 - - class CapabilityUnavailableError(Exception): """The active Hopper build lacks one admitted public API operation.""" @@ -149,14 +172,22 @@ def _document(name=None): api = _api() documents = api.documents() if name is not None: - for candidate in documents: - if candidate.getDocumentName() == name: - return candidate + matches = [candidate for candidate in documents if candidate.getDocumentName() == name] + if len(matches) == 1: + return matches[0] + if len(matches) > 1: + current = api.current_document() + if current is not None and current.getDocumentName() == name: + return current + raise ValueError("Hopper document name is ambiguous") raise ValueError("Unknown Hopper document") if _selected_document is not None: for candidate in documents: if candidate.getDocumentName() == _selected_document: return candidate + session_document = _session_document() + if session_document is not None: + return session_document current = api.current_document() if current is None: raise ValueError("No Hopper document is loaded") @@ -225,7 +256,7 @@ def _containing_procedure(document, address): return (procedure, None) if procedure is not None else (None, "not_in_procedure") -def _instruction_addresses(procedure, limit): +def _instruction_addresses(procedure, limit=None): result = [] seen = set() segment = procedure.getSegment() @@ -234,7 +265,7 @@ def _instruction_addresses(procedure, limit): address = block.getStartingAddress() end = block.getEndingAddress() while address < end and address not in seen: - if len(result) >= limit: + if limit is not None and len(result) >= limit: truncated = True return result, truncated seen.add(address) @@ -252,18 +283,9 @@ def _instruction_addresses(procedure, limit): def _procedure_references(document, params): procedure = _procedure(document, params.get("procedure")) direction = params.get("direction", "outgoing") - offset = params.get("offset", 0) - limit = params.get("limit", 100) - max_instructions = params.get("max_instructions", 500) if direction not in ("incoming", "outgoing"): raise ValueError("direction must be incoming or outgoing") - if not isinstance(offset, int) or isinstance(offset, bool) or offset < 0: - raise ValueError("offset must be a non-negative integer") - if not isinstance(limit, int) or isinstance(limit, bool) or limit < 1 or limit > 500: - raise ValueError("limit must be an integer between 1 and 500") - if not isinstance(max_instructions, int) or isinstance(max_instructions, bool) or max_instructions < 1 or max_instructions > 5000: - raise ValueError("max_instructions must be an integer between 1 and 5000") - addresses, scan_truncated = _instruction_addresses(procedure, max_instructions) + addresses, _ = _instruction_addresses(procedure) edges = set() for address in addresses: segment = _segment(document, address) @@ -272,8 +294,7 @@ def _procedure_references(document, params): edges.add((address, reference) if direction == "outgoing" else (reference, address)) ordered = sorted(edges) items = [] - selected = ordered[offset:offset + limit] - for source, target in selected: + for source, target in ordered: source_procedure, _ = _containing_procedure(document, source) target_procedure, _ = _containing_procedure(document, target) items.append({ @@ -283,13 +304,9 @@ def _procedure_references(document, params): "target_procedure": _procedure_identity(target_procedure) if target_procedure is not None else None, "kind": _unavailable("Hopper's public Python API does not classify reference kinds"), }) - next_offset = offset + len(selected) - has_more = next_offset < len(ordered) - truncated = scan_truncated or has_more return { "procedure": _procedure_identity(procedure), "direction": direction, - "references": {"items": items, "total": None if scan_truncated else len(ordered), "returned": len(items), "truncated": truncated, "next_offset": next_offset if has_more and not scan_truncated else None}, - "instructions_scanned": len(addresses), "instruction_scan_truncated": scan_truncated, + "references": items, } @@ -352,230 +369,39 @@ def _search_inventory(document, kind): return inventory -def _checked_regex_paths(left, right, operation): - """Apply one path-count operation without crossing the static work budget.""" - if operation == "add": - exceeded = left > MAX_REGEX_BACKTRACKING_PATHS - right - result = left + right - else: - exceeded = right != 0 and left > MAX_REGEX_BACKTRACKING_PATHS // right - result = left * right - if exceeded or result > MAX_REGEX_BACKTRACKING_PATHS: - raise ValueError( - "Regex exceeds the %d-path backtracking budget" - % MAX_REGEX_BACKTRACKING_PATHS - ) - return result - - -def _repeat_regex_paths(child_paths, minimum, maximum): - """Count every bounded repetition path, including alternative child paths.""" - paths = 0 - repeated_paths = 1 - for count in range(maximum + 1): - if count >= minimum: - paths = _checked_regex_paths(paths, repeated_paths, "add") - if count < maximum: - repeated_paths = _checked_regex_paths( - repeated_paths, child_paths, "multiply" - ) - return paths - - -def _validate_regex_class(items): - """Accept only constant-time character-class operations.""" - allowed = { - sre_parse.CATEGORY, - sre_parse.LITERAL, - sre_parse.NEGATE, - sre_parse.RANGE, - } - if any(operation not in allowed for operation, _ in items): - raise ValueError("Regex operation is not supported by the bounded matcher") - - -def _validate_regex_node(node, inside_repeat=False): - """Return capped path and step bounds for Python regex evaluation.""" - leaf_operations = { - sre_parse.ANY, - sre_parse.AT, - sre_parse.CATEGORY, - sre_parse.LITERAL, - sre_parse.NOT_LITERAL, - } - forbidden = { - sre_parse.ASSERT, - sre_parse.ASSERT_NOT, - sre_parse.GROUPREF, - sre_parse.GROUPREF_EXISTS, - } - for name in ("GROUPREF_IGNORE", "GROUPREF_LOC_IGNORE", "GROUPREF_UNI_IGNORE"): - operation = getattr(sre_parse, name, None) - if operation is not None: - forbidden.add(operation) - repeat_tokens = {sre_parse.MAX_REPEAT, sre_parse.MIN_REPEAT} - possessive = getattr(sre_parse, "POSSESSIVE_REPEAT", None) - if possessive is not None: - repeat_tokens.add(possessive) - atomic = getattr(sre_parse, "ATOMIC_GROUP", None) - - paths = 1 - steps = 0 - for operation, argument in node: - if operation in forbidden: - raise ValueError("Regex lookarounds and backreferences are not supported") - if operation in leaf_operations: - operation_paths = 1 - operation_steps = 1 - elif operation == sre_parse.IN: - _validate_regex_class(argument) - operation_paths = 1 - operation_steps = 1 - elif operation in repeat_tokens: - if inside_repeat: - raise ValueError("Nested regex repetitions are not supported") - minimum, maximum, child = argument - if maximum == sre_parse.MAXREPEAT or maximum > 1000: - raise ValueError( - "Unbounded or excessive regex repetitions are not supported" - ) - child_paths, child_steps = _validate_regex_node(child, True) - operation_paths = _repeat_regex_paths( - child_paths, minimum, maximum - ) - operation_steps = maximum * child_steps - elif operation == sre_parse.SUBPATTERN: - operation_paths, operation_steps = _validate_regex_node( - argument[-1], inside_repeat - ) - elif operation == sre_parse.BRANCH: - operation_paths = 0 - operation_steps = 0 - for branch in argument[1]: - branch_paths, branch_steps = _validate_regex_node( - branch, inside_repeat - ) - operation_paths = _checked_regex_paths( - operation_paths, - branch_paths, - "add", - ) - operation_steps = max(operation_steps, branch_steps) - elif atomic is not None and operation == atomic: - operation_paths, operation_steps = _validate_regex_node( - argument, inside_repeat - ) - else: - raise ValueError("Regex operation is not supported by the bounded matcher") - paths = _checked_regex_paths(paths, operation_paths, "multiply") - steps += operation_steps - return paths, steps - - -def _bounded_regex_matcher(expression, backtracking_paths, steps_per_path): - """Create a matcher with per-candidate and cumulative work bounds.""" - remaining_work = MAX_REGEX_SEARCH_WORK_UNITS - work_per_character = backtracking_paths * max(steps_per_path, 1) - - def matches(value): - nonlocal remaining_work - if not isinstance(value, str): - raise ValueError("Regex candidates must be strings") - if len(value) > MAX_REGEX_CANDIDATE_LENGTH: - raise ValueError( - "Regex candidate exceeds the %d-character safety limit" - % MAX_REGEX_CANDIDATE_LENGTH - ) - required_work = work_per_character * max(len(value), 1) - if required_work > remaining_work: - raise ValueError( - "Regex search exceeds the %d-unit work budget" - % MAX_REGEX_SEARCH_WORK_UNITS - ) - remaining_work -= required_work - return expression.search(value) is not None - - return matches - - -def _search_page(document, kind, params): +def _search_results(document, kind, params): pattern = params.get("pattern") - if not isinstance(pattern, str) or not pattern or len(pattern) > MAX_SEARCH_PATTERN_LENGTH: - raise ValueError("pattern must contain between 1 and 256 characters") + if not isinstance(pattern, str) or not pattern: + raise ValueError("pattern must be a non-empty string") mode = params.get("mode", "literal") if mode not in ("literal", "regex"): raise ValueError("mode must be literal or regex") case_sensitive = params.get("case_sensitive", False) if not isinstance(case_sensitive, bool): raise ValueError("case_sensitive must be a boolean") - offset = params.get("offset", 0) - limit = params.get("limit", 100) - if not isinstance(offset, int) or isinstance(offset, bool) or offset < 0: - raise ValueError("offset must be a non-negative integer") - if not isinstance(limit, int) or isinstance(limit, bool) or limit < 1 or limit > 100: - raise ValueError("limit must be an integer between 1 and 100") if mode == "literal": needle = pattern if case_sensitive else pattern.casefold() matches = lambda value: needle in (value if case_sensitive else value.casefold()) else: try: - parsed = sre_parse.parse(pattern) - backtracking_paths, steps_per_path = _validate_regex_node(parsed) expression = re.compile(pattern, 0 if case_sensitive else re.IGNORECASE) except (re.error, OverflowError) as error: raise ValueError("Invalid regex pattern") from error - matches = _bounded_regex_matcher( - expression, backtracking_paths, steps_per_path - ) + matches = lambda value: expression.search(value) is not None selected = [] - total = 0 - page_end = offset + limit for item in _search_inventory(document, kind): if not matches(item[1]): continue - if offset <= total < page_end: - selected.append(item) - total += 1 - next_offset = offset + len(selected) - has_more = next_offset < total - return { - "items": [ + selected.append(item) + return [ { "address": address, - "value": value[:MAX_SEARCH_VALUE_LENGTH], - "value_truncated": len(value) > MAX_SEARCH_VALUE_LENGTH, + "value": value, } for address, value in selected - ], - "offset": offset, - "limit": limit, - "total": total, - "next_offset": next_offset if has_more else None, - "has_more": has_more, - } - - -def _page(values, offset, limit): - """Return one deterministically address-sorted page without crossing an unbounded map.""" - if not isinstance(offset, int) or isinstance(offset, bool) or offset < 0: - raise ValueError("offset must be a non-negative integer") - if not isinstance(limit, int) or isinstance(limit, bool) or limit < 1 or limit > 500: - raise ValueError("limit must be an integer between 1 and 500") - ordered = sorted(values.items(), key=lambda item: int(item[0], 16)) - selected = ordered[offset:offset + limit] - total = len(ordered) - next_offset = offset + len(selected) - has_more = next_offset < total - return { - "items": [{"address": address, "value": value} for address, value in selected], - "offset": offset, - "limit": limit, - "total": total, - "next_offset": next_offset if has_more else None, - "has_more": has_more, - } + ] def _unavailable(reason): @@ -590,16 +416,6 @@ def _offset(params, name): return value -def _collection_offset(params, name): - values = params.get("collection_offset", {}) - if not isinstance(values, dict): - raise ValueError("collection_offset must be an object") - value = values.get(name, 0) - if not isinstance(value, int) or isinstance(value, bool) or value < 0: - raise ValueError("collection_offset.%s must be a non-negative integer" % name) - return value - - def _bounded(items, offset, limit, total=None, scan_truncated=False): selected = items[offset:offset + limit] known_total = len(items) if total is None and not scan_truncated else total @@ -665,37 +481,18 @@ def _assembly(procedure, limit=None): def _read_function_instructions(document, params): - """Read one bounded raw-instruction window without invoking decompilation.""" + """Read all raw instructions without invoking decompilation.""" procedure = _procedure(document, params.get("procedure")) - offset = _offset(params, "offset") - limit = params.get("limit", 64) - if offset > 100000: - raise ValueError("offset must not exceed 100000") - if not isinstance(limit, int) or isinstance(limit, bool) or limit < 1 or limit > 500: - raise ValueError("limit must be an integer between 1 and 500") - addresses, scan_truncated = _instruction_addresses( - procedure, offset + limit + 1 - ) - start = min(offset, len(addresses)) - end = min(len(addresses), start + limit) + addresses, _ = _instruction_addresses(procedure) segment = procedure.getSegment() items = [] - for address in addresses[start:end]: + for address in addresses: line = _render_instruction(segment, address) if line is not None: items.append(line) - has_more = scan_truncated or end < len(addresses) return { "procedure": _procedure_identity(procedure), - "instructions": { - "items": items, - "total": None if scan_truncated else len(addresses), - "returned": len(items), - "truncated": has_more, - "next_offset": end if has_more else None, - }, - "instructions_scanned": len(addresses), - "instruction_scan_truncated": scan_truncated, + "instructions": items, "limitations": [ "Instruction text and ordering are Hopper-specific representations.", "The fast path does not decompile the procedure or scan whole-program names and strings.", @@ -704,20 +501,9 @@ def _read_function_instructions(document, params): def _analyze_function(document, params): - """Collect a bounded, single-pass function dossier for agent callers.""" + """Collect the complete function dossier for agent callers.""" procedure = _procedure(document, params.get("procedure")) - limit = params.get("limit", 100) - max_chars = params.get("max_pseudocode_chars", 20000) - max_instructions = params.get("max_instructions", 500) - pseudocode_offset = _offset(params, "pseudocode_offset") - assembly_offset = _offset(params, "assembly_offset") - if not isinstance(limit, int) or isinstance(limit, bool) or limit < 1 or limit > 500: - raise ValueError("limit must be an integer between 1 and 500") - if not isinstance(max_chars, int) or isinstance(max_chars, bool) or max_chars < 1 or max_chars > 100000: - raise ValueError("max_pseudocode_chars must be between 1 and 100000") - if not isinstance(max_instructions, int) or isinstance(max_instructions, bool) or max_instructions < 1 or max_instructions > 5000: - raise ValueError("max_instructions must be between 1 and 5000") - addresses, instruction_scan_truncated = _instruction_addresses(procedure, max_instructions) + addresses, instruction_scan_truncated = _instruction_addresses(procedure) blocks = [] all_blocks = list(procedure.basicBlockIterator()) for block in all_blocks: @@ -732,7 +518,7 @@ def _analyze_function(document, params): "successors": sorted(set(successors), key=lambda value: int(value, 16)), }) pseudo = _pseudocode(document, procedure) or "" - assembly_lines = _assembly(procedure, max_instructions).splitlines() if params.get("include_assembly", False) else [] + assembly_lines = _assembly(procedure).splitlines() callers = sorted((_procedure_identity(item) for item in procedure.getAllCallerProcedures()), key=lambda item: int(item["address"], 16)) callees = sorted((_procedure_identity(item) for item in procedure.getAllCalleeProcedures()), key=lambda item: int(item["address"], 16)) comments = [] @@ -785,28 +571,17 @@ def _analyze_function(document, params): comments.sort(key=lambda item: (int(item["address"], 16), item["kind"])) 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))) - pseudo_text = pseudo[pseudocode_offset:pseudocode_offset + max_chars] - pseudo_next = pseudocode_offset + len(pseudo_text) - def collection(name, items, scan_limited=False): - return _bounded(items, _collection_offset(params, name), limit, None, scan_limited) return { "procedure": {"address": _hex(procedure.getEntryPoint()), "name": _procedure_name(procedure), "classification": None, "signature": procedure.signatureString(), "locals": _procedure_locals(procedure)}, - "pseudocode": {"text": pseudo_text, "total_chars": len(pseudo), "returned_chars": len(pseudo_text), "truncated": pseudo_next < len(pseudo), "next_offset": pseudo_next if pseudo_next < len(pseudo) else None}, - "assembly": _bounded( - assembly_lines, - assembly_offset, - max_instructions, - None, - instruction_scan_truncated if params.get("include_assembly", False) else False, - ), - "comments": collection("comments", comments, instruction_scan_truncated), - "callers": collection("callers", callers), "callees": collection("callees", callees), - "incoming_references": collection("incoming_references", incoming, instruction_scan_truncated), - "outgoing_references": collection("outgoing_references", outgoing, instruction_scan_truncated), - "referenced_strings": collection("referenced_strings", referenced_strings, instruction_scan_truncated), - "referenced_names": collection("referenced_names", referenced_names, instruction_scan_truncated), - "basic_blocks": collection("basic_blocks", blocks), - "instruction_scan": {"scanned": len(addresses), "truncated": instruction_scan_truncated}, + "pseudocode": pseudo, + "assembly": assembly_lines, + "comments": comments, + "callers": callers, "callees": callees, + "incoming_references": incoming, + "outgoing_references": outgoing, + "referenced_strings": referenced_strings, + "referenced_names": referenced_names, + "basic_blocks": blocks, "limitations": [ "Hopper's public Python API does not classify reference kinds.", "Hopper's public Python API does not expose equivalent external or thunk classification in this dossier.", @@ -825,6 +600,13 @@ def _dispatch(method, params): document = _session_document() if document is None: return {"shutdown": True, "analysis_stopped": True, "document_closed": True} + if method == "shutdown" and not REA_OWNS_PROCESS_LIFETIME: + return { + "shutdown": True, + "analysis_stopped": not document.backgroundProcessActive(), + "document_closed": False, + "document_retained": True, + } if document.backgroundProcessActive(): document.requestBackgroundProcessStop() if method == "shutdown" and REA_OWNS_PROCESS_LIFETIME: @@ -968,24 +750,24 @@ def _dispatch(method, params): }) return result if method == "list_procedures": - return _page(dict(_search_inventory(document, "procedure")), params.get("offset", 0), params.get("limit", 100)) + return [{"address": address, "value": value} for address, value in _search_inventory(document, "procedure")] if method == "list_strings": values = dict(_search_inventory(document, "string")) requested = params.get("address") if requested is not None: key = _hex(_address(document, requested)) values = {key: values[key]} if key in values else {} - return _page(values, params.get("offset", 0), params.get("limit", 100)) + return [{"address": _hex(address), "value": value} for address, value in sorted(values.items())] if method == "list_names": result = dict(_search_inventory(document, "name")) requested = params.get("address") if requested is not None: key = _hex(_address(document, requested)) result = {key: result[key]} if key in result else {} - return _page(result, params.get("offset", 0), params.get("limit", 100)) + return [{"address": _hex(address), "value": value} for address, value in sorted(result.items(), key=lambda item: int(item[0]))] if method in ("search_procedures", "search_strings"): kind = "procedure" if method == "search_procedures" else "string" - return _search_page(document, kind, params) + return _search_results(document, kind, params) if method.startswith("procedure_"): procedure = _procedure(document, params.get("procedure")) if method == "procedure_address": @@ -1147,6 +929,7 @@ def _run(): # Hopper's public objects are bound to its dedicated Python execution thread. -# Keep dispatch on that thread; moving calls to an arbitrary worker can deadlock. +# Keep dispatch on that thread; moving calls to a worker can deadlock. if __name__ == "__main__": + _bind_session_document() _run() diff --git a/docs/adr/0001-provider-selection-and-analysis-profiles.md b/docs/adr/0001-provider-selection-and-analysis-profiles.md index 20848a71f9..5fc20dd665 100644 --- a/docs/adr/0001-provider-selection-and-analysis-profiles.md +++ b/docs/adr/0001-provider-selection-and-analysis-profiles.md @@ -278,9 +278,7 @@ The adapter returns this provider-neutral envelope: ```json { - "schema_version": 1, "provider": { "id": "ghidra", "version": "" }, - "provider_profile_schema_version": 1, "parameters": {}, "digest": "" } @@ -295,8 +293,8 @@ parameters as opaque data. A selected deep binding requires a concrete provider version. If the adapter cannot determine it, the candidate is unavailable with `version_unresolved`; REA does not persist a cache that merely commits `null` or "whatever is -installed". Provider identity, provider-profile schema version, normalized -parameters, or provider version changes produce a different digest. +installed". Provider identity, normalized parameters, or provider version +changes produce a different digest. The same target, configuration, and provider must resolve the same profile over CLI and MCP. Profile resolution must be side-effect-free and complete before @@ -321,7 +319,7 @@ A cached entry is reusable only when all of the following match exactly: - target digest, generic format and kind, and selected architecture; - provider ID and provider version; -- profile schema versions and profile digest; +- profile digest; - operation and canonical parameters; and - the existing cacheability and immutability rules. 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 5b6af3cf2b..13c0e6c0ef 100644 --- a/docs/adr/0003-managed-code-evidence-and-provider-boundary.md +++ b/docs/adr/0003-managed-code-evidence-and-provider-boundary.md @@ -189,7 +189,7 @@ or a CLR load. Complete-coverage claims require every applicable bounded region to have been admitted; otherwise coverage is partial, unknown, or unavailable with exact offsets and reasons. -The input path remains under REA's approved investigation roots. Local artifact +The caller selects the local input path directly. Local artifact paths, digests, MVIDs, tokens, malformed offsets, and analysis metadata are actionable diagnostics and are not secrets. Credentials, authorization data, and genuine secrets remain redacted. diff --git a/docs/browser-observation.md b/docs/browser-observation.md index 3823305f33..a8ec289a6e 100644 --- a/docs/browser-observation.md +++ b/docs/browser-observation.md @@ -13,7 +13,11 @@ REA can attach to a user-owned Chrome-family browser through the Chrome DevTools - `capture_web_screenshot` / `rea capture-web-screenshot` returns an explicitly approved, bounded, content-addressed visible-viewport PNG. - `compare_web_screenshots` / `rea compare-web-screenshots` performs bounded local PNG pixel comparison without OCR or external services. - Every surface has equivalent CLI and MCP contracts and returns Evidence v2 provenance. -- MCP session results are retained as `rea://evidence/{evidenceId}` resources. One-shot CLI output is not retained by a long-lived REA session. +- MCP tools return complete results inline and include the Evidence ID. Session evidence can be exported with `export_evidence_bundle`. + +Target discovery returns the complete approved target array in one result. The +CDP endpoint's response-size ceiling remains internal; an oversized discovery +response fails explicitly instead of appearing complete. Electron `file://` pages use a separate provider, permission capability, and root model; see [electron-observation.md](electron-observation.md). Existing static application Evidence and passive web/Electron captures can be diff --git a/docs/electron-observation.md b/docs/electron-observation.md index 2843af92d5..a30a2ca7fd 100644 --- a/docs/electron-observation.md +++ b/docs/electron-observation.md @@ -5,7 +5,6 @@ REA can attach to a user-owned Electron/Chromium CDP endpoint and inspect existi This passive runtime surface is distinct from the target-free static [`analyze_javascript_application`](javascript-artifact-reconstruction.md) workflow. Static analysis reads an approved ASAR or extracted directory under -`REA_INVESTIGATION_INPUT_ROOTS_JSON`; it does not attach to CDP. Runtime observations and static inferences are never silently treated as the same fact. Use the separate [`reconcile_javascript_runtime`](javascript-runtime-reconciliation.md) workflow @@ -25,6 +24,10 @@ Endpoints accept only explicit-port loopback HTTP URLs. Roots are canonicalized ## Workflow +`list_electron_targets` returns every target inside the approved roots in one +inline array. CDP response-size limits remain internal and oversized discovery +responses fail explicitly. + ```bash rea list-electron-targets http://127.0.0.1:9223 --approved --json rea inspect-electron-page http://127.0.0.1:9223 TARGET_ID \ diff --git a/docs/installation.md b/docs/installation.md index b0a07d4f81..fa041bfcc3 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -149,6 +149,13 @@ and digest, validates the application bundle, and atomically installs it to operator can choose its demo mode or activate an existing license. Homebrew and administrator access are not used. +The Hopper launcher action used by REA creates a document from an executable; +its supported command-line interface does not attach to an already-open +document. While another live REA session owns the same target and loader +profile, a second session reports the owning run ID instead of opening a +duplicate document. Closing the owning REA session releases this guard; Hopper +keeps its document open. + On supported Linux distributions, approved setup verifies Hopper's official `.deb`, `.rpm`, or Arch package before invoking the native package manager. REA runs the supported demo build on a private Xvfb display and selects Hopper's @@ -158,7 +165,7 @@ desktop display. Unattended package-manager access requires mount, REA first verifies the conflict and then uses an unprivileged user and mount namespace with a private mode-1777 tmpfs over that directory only. The host mount and the rest of `/tmp` remain unchanged; this fallback never invokes -`sudo`. `rea doctor --provider hopper --detail full --json` reports the selected +`sudo`. `rea doctor --provider hopper --json` reports the selected strategy and both host and effective mount facts. ### Hopper in CI @@ -175,7 +182,7 @@ starting an unattended job. Ephemeral macOS runners therefore need a pre-provisioned user session or a deliberate interactive bootstrap step. When Hopper cannot start in CI, run -`rea doctor --provider hopper --detail full --json` in the failing runner. +`rea doctor --provider hopper --json` in the failing runner. Structured failures distinguish private-display dependencies, an unsupported demo dialog or build, process-ownership conflicts, and an early lifecycle exit. Apply the reported remediation rather than exposing the runner's desktop, diff --git a/docs/investigation-workspaces.md b/docs/investigation-workspaces.md index f4d8b79c78..a0a4bc2b0d 100644 --- a/docs/investigation-workspaces.md +++ b/docs/investigation-workspaces.md @@ -11,7 +11,6 @@ the write: ```bash export REA_EVIDENCE_ROOTS_JSON='["/absolute/path/to/evidence"]' -export REA_INVESTIGATION_INPUT_ROOTS_JSON='["/absolute/path/to/releases"]' rea investigate-versions \ /absolute/path/to/version-1 \ @@ -22,13 +21,11 @@ rea investigate-versions \ ``` The two versions may be regular artifacts or directories supported by the -artifact graph provider. Both must resolve beneath an explicitly configured -`REA_INVESTIGATION_INPUT_ROOTS_JSON` root. The workspace parent must already -exist beneath `REA_EVIDENCE_ROOTS_JSON`. REA never creates an allowlisted root -implicitly. +artifact graph provider. Workspace files remain restricted by +`REA_EVIDENCE_ROOTS_JSON`; input paths are used directly by the local process. Use `--expected-revision N` when an external coordinator needs an explicit -compare-and-swap guard. Traversal, byte, page, and comparison limits are also +compare-and-swap guard. Traversal, byte, page, and comparison controls are available as CLI options. After a completed run returns its stable run ID, `--replay-run-id RUN_ID` @@ -104,7 +101,6 @@ digest. Parsing verifies: Writes are canonical JSON, atomic, fsynced, and mode `0600`. REA rejects workspace paths outside `REA_EVIDENCE_ROOTS_JSON`, symlink destinations, -artifact inputs outside `REA_INVESTIGATION_INPUT_ROOTS_JSON`, oversized or deeply nested JSON, stale expected revisions, and concurrent lock holders. Lock or CAS conflicts fail without mutating the workspace; callers may retry the same idempotent request. diff --git a/docs/javascript-application-graph.md b/docs/javascript-application-graph.md index f3e1b3f512..9dec3866de 100644 --- a/docs/javascript-application-graph.md +++ b/docs/javascript-application-graph.md @@ -1,6 +1,6 @@ # JavaScript Application Graph -JavaScript Application Graph v1 is REA's provider-neutral domain model for +JavaScript Application Graph is REA's provider-neutral domain model for connecting shipped application bytes, JavaScript structure, Electron process boundaries, passive browser observations, and native add-ons. It is a durable, canonical data contract; it is not an extractor or a new CLI/MCP tool. @@ -32,13 +32,12 @@ adds capture-scoped targets, frames, scripts, workers, and inferred verification remains a separate later layer. The domain graph itself never reaches outward to obtain any of those facts. -## Versioned record +## Stored record A stored graph has this top-level shape: ```text schema: "JavaScriptApplicationGraph" -schema_version: 1 graph_id: jag_ root_node_ids: jag_node_[] nodes: application entities with one or more observations @@ -47,14 +46,14 @@ coverage: complete, partial, unknown, or unavailable limitations: explicit graph-wide constraints ``` -Parsing rejects unknown fields, unsupported versions, non-canonical ordering, -duplicate IDs, stale semantic commitments, missing roots, dangling endpoints, -self-edges, and `changed_from` edges between unlike node kinds. Constructors -normalize set-like arrays before deriving their IDs. +Parsing rejects unknown fields, non-canonical ordering, duplicate IDs, stale +semantic commitments, missing roots, dangling endpoints, self-edges, and +`changed_from` edges between unlike node kinds. Constructors normalize set-like +arrays before deriving their IDs. ## Entities and relationships -The v1 node vocabulary covers: +The node vocabulary covers: - package, installer, and artifact; - ASAR entry; @@ -160,7 +159,7 @@ so callers cannot preserve a stale ID after changing semantic content. ## Bounds -The v1 boundary admits at most 1,000 roots, 100,000 nodes, 200,000 edges, and 64 +The graph boundary admits at most 1,000 roots, 100,000 nodes, 200,000 edges, and 64 observations per node. Each properties object is valid bounded JSON with at most 64 keys, depth 6, 512 structural nodes, and 4,096 characters per string. Arrays of evidence links, limits, and limitations have independent caps. @@ -184,7 +183,3 @@ The public domain functions are: - `serializeJavaScriptApplicationGraph` for canonical JSON; - `computeJavaScriptApplicationGraphSha256` for a byte-stable verified graph digest. - -Schema evolution is explicit. A future incompatible shape receives a new -`schema_version`; v1 parsing fails with an unsupported-version diagnostic rather -than guessing how to reinterpret it. diff --git a/docs/javascript-application-workflows.md b/docs/javascript-application-workflows.md index 371467ddc1..3bbe72f158 100644 --- a/docs/javascript-application-workflows.md +++ b/docs/javascript-application-workflows.md @@ -1,6 +1,6 @@ # Cross-layer JavaScript application workflows -REA derives a bounded feature trace from one authenticated JavaScript +REA derives a complete reachable feature trace from one authenticated JavaScript Application Graph and compares two authenticated graph versions. The MCP tools are `trace_application_feature`, `trace_javascript_semantics`, `compare_application_versions`, `compare_source_to_bundle`, and @@ -25,11 +25,11 @@ semantic data as an empty graph. Select one literal seed kind: node ID, route, string, API, IPC channel, module, or native export. Matching is exact or literal substring matching; regular -expressions and executable predicates are not accepted. Direction, depth, -nodes, edges, paths, and seed matches all have caller-visible limits. +expressions and executable predicates are not accepted. The trace includes all +matching seeds and the complete graph reachable in the selected direction. -The result contains the matching basis, a bounded subgraph, terminal paths, -authority summaries, truncation frontier, and native handoffs. A handoff binds +The result contains the matching basis, complete reachable subgraph, terminal +paths, authority summaries, and native handoffs. A handoff binds the exact native artifact digest and requested exports from the application graph. Existing Hopper or Ghidra Evidence is linked only when its subject digest matches exactly. Otherwise the result recommends provider-neutral follow-up diff --git a/docs/javascript-artifact-reconstruction.md b/docs/javascript-artifact-reconstruction.md index bc09ed1b75..969cca14ae 100644 --- a/docs/javascript-artifact-reconstruction.md +++ b/docs/javascript-artifact-reconstruction.md @@ -17,15 +17,11 @@ separate static, runtime, and cross-layer inference authorities. ## Public workflow -The administrator first grants a canonical input root. Every request still -requires explicit per-call approval, and the requested ASAR or directory must -remain beneath that root after canonicalization: +The tool reads the caller-selected local directory or ASAR path directly: ```bash -export REA_INVESTIGATION_INPUT_ROOTS_JSON='["/absolute/path/to/apps"]' -rea analyze /absolute/path/to/apps/app.asar --approved --json +rea analyze /absolute/path/to/apps/app.asar --json rea analyze-javascript-application /absolute/path/to/apps/app.asar \ - --approved \ --json ``` @@ -35,26 +31,18 @@ command when setting explicit format or reconstruction limits. Native targets, single JavaScript files, `.app` bundles, and explicit deep-provider or snapshot requests retain the native deep-analysis route. -When configuring an MCP client, set the variable before approved setup so REA -copies the explicit non-secret root policy into the managed registration: +Configure an MCP client with the ordinary REA setup command: ```bash -export REA_INVESTIGATION_INPUT_ROOTS_JSON='["/absolute/path/to/apps"]' rea setup ``` -Restart the configured MCP client after changing this administrator ceiling. -An already-running server cannot acquire a new process environment through -MCP elicitation or `SIGHUP`. - The equivalent MCP input is: ```json { "input_path": "/absolute/path/to/apps/app.asar", - "format": "auto", - "approved": true, - "source_map_read_approved": false + "format": "auto" } ``` @@ -90,7 +78,7 @@ Selected bounded text is then parsed as inert data to recover: - static imports, dynamic imports, CommonJS `require` calls, workers, and service workers; - route, network endpoint, storage, and vendor-marker observations; -- local source-map declarations and, when separately approved, bounded original +- local source-map declarations and original source names and content digests; - explicit BrowserWindow options and `webPreferences`, including statically resolvable preload entrypoints; @@ -119,11 +107,7 @@ JavaScript file, package record, or source map produces an `unknown` graph scope with `state: unavailable`; it is not treated as evidence that modules or source are absent. -Source-map content has a separate `source_map_read_approved` input. Without that -approval, REA inventories the map, links a static declaration when present, and -records partial non-truncated coverage plus an unavailable parse scope. With -approval, the graph stores original source names and optional content digests, -not the raw `sourcesContent` text. +Source-map contents are parsed as local input. The graph stores original source names and optional content digests, not raw `sourcesContent` text. Only explicitly present BrowserWindow values are observations. REA does not substitute version-dependent Electron defaults for omitted `webPreferences`. @@ -183,7 +167,7 @@ knowable, `omitted_count` is `null` rather than a guessed value. The source-owned fixture covers an extracted directory, a direct ASAR with an unpacked native add-on, a direct ASAR whose unpacked native companion is missing, and an ASAR nested beneath a directory. Tests also cover deterministic -reruns, parse-not-execute behavior, source-map approval, global source-map +reruns, parse-not-execute behavior, source-map parsing, global source-map limits, malformed structured data, invalid containers, traversal, symlink escape, oversized text, cancellation, AST truncation, and repeated content identities. A separate synthetic Electron fixture covers explicit safe and diff --git a/docs/javascript-runtime-observation.md b/docs/javascript-runtime-observation.md index 39ab5a48d8..6f751b51e6 100644 --- a/docs/javascript-runtime-observation.md +++ b/docs/javascript-runtime-observation.md @@ -31,6 +31,10 @@ origin scope. Targets already marked attached are rejected rather than displacing another debugger. Canonical file paths are checked after symlink resolution. Excluded locations are counted but never retained. +`list_javascript_runtime_targets` returns every approved target in one inline +array. The Inspector discovery response-size ceiling remains internal; an +oversized response fails explicitly. + ## Passive protocol boundary The provider sends exactly two protocol commands: diff --git a/docs/mcp-contracts.md b/docs/mcp-contracts.md index ef33f2cba8..4e1bf6c1ef 100644 --- a/docs/mcp-contracts.md +++ b/docs/mcp-contracts.md @@ -2,14 +2,11 @@ ## Identity and discovery -`rea://server/identity` and `binary_session` report the package, server, SDK, -negotiated protocol, skill, and schema-sensitive catalog identities separately. -An absent live comparison is `unknown`, never aligned. Callers can supply the -expected package version, catalog digest, or registered server path to -`binary_session`; a mismatch means the registered MCP process must be restarted. -`rea doctor` separately inspects supported JSON/TOML client registrations, -reports their command vectors as aligned, stale, missing, or invalid, and keeps -live-server state `unknown` unless the active connection supplies identity. +`binary_session` reports the active package, server, SDK, and negotiated +protocol details. `rea doctor` separately inspects supported JSON/TOML client +registrations, reports their command vectors as aligned, stale, missing, or +invalid, and keeps live-server state `unknown` unless the active connection +supplies identity. Canonical tool names remain stable, while `tools/list` advertises only the operations callable for the current target, provider, policy, host, and @@ -58,49 +55,10 @@ CLI calls work without a progress token and translate SIGINT into the same AbortSignal used by providers. Existing controlled-process cleanup and provider shutdown rules still apply; REA never kills a process it cannot prove it owns. -## Evidence resources +## Tool results -Evidence-producing tools return compact summaries plus `resource_link` content. -Every link is accompanied by an ordinary instruction to copy its opaque URI -unchanged and call MCP `resources/read` (Codex: `read_mcp_resource`). Session -resources are connection-local: - -- `rea://evidence/{evidenceId}` returns the complete immutable Evidence v2 record. -- `rea://evidence/{evidenceId}/section/{section}` returns a bounded result section. - Stable sections include `result`, `terminal`, `filesystem`, `process`, - `protocol`, `nodes`, `occurrences`, and `edges` when present. -- `rea://unknown/{unknownId}` returns the current residual-unknown head and its - immutable revision history. -- `rea://evidence-bundle/{bundleDigest}` returns immutable canonical bytes - retained by `snapshot_evidence_bundle`. -- `rea://snapshot/current` returns the mutable native analysis cache as an - `available` or `unavailable` state. -- `rea://artifact/{manifestId}/{collection}` returns a canonical artifact - `nodes`, `occurrences`, or `edges` page with Evidence provenance. -- `rea://function/{targetSha256}/{address}` returns a retained function dossier - for the exact target and address. -- `rea://workspace/{workspaceId}/revision/{revision}` returns an immutable, - CAS-linked investigation workspace revision retained by this session. - -Successful automatic cross-version investigations include both Evidence and -workspace `resource_link` blocks. Workspace resources preserve revision and -`previous_revision_digest` commitments; persistent workspace files remain -subject to configured read/write roots. - -Retained bundle URIs are session-scoped and are invalidated by -`release_evidence_bundle` or session close. When retention reaches its bounded -capacity, release an unneeded digest and retry; for cross-session recovery use -`export_evidence_bundle` followed by `import_evidence_bundle` and -`snapshot_evidence_bundle` in the new session. - -`export_evidence_bundle` is file-only and requires `path`; existing files -require `overwrite: true`. Use `snapshot_evidence_bundle` and then -`resources/read` when the complete bundle is needed within the current session. - -An Evidence URI is discoverability, not authorization. It cannot authorize file -access, extraction, mounting, execution, or networking. IDs disappear when the -session ends unless the existing Evidence bundle or workspace persistence flow -explicitly retains them. +Evidence-producing tools return their result and Evidence context inline. A +workflow can retrieve retained Evidence records with `get_evidence_bundle`. ## Aggregate native context @@ -162,11 +120,7 @@ administrator ceiling. A request outside that ceiling reports `elicitation_supported: false` and `restart_required: true`; interactive consent cannot silently widen administrator policy. -`analyze_javascript_application` uses the `investigation_input` capability. Its -absolute `input_path` must be inside `REA_INVESTIGATION_INPUT_ROOTS_JSON` and the -request must set `approved: true` before any artifact read. Reading source-map -contents additionally requires `source_map_read_approved: true`; ordinary input -approval does not imply that separate authority. +`analyze_javascript_application` reads the selected local directory or ASAR directly. It has no per-call approval flag or configured investigation root. ## Integrity record-and-continue diff --git a/docs/mcp-prompts.md b/docs/mcp-prompts.md index 70c0278b59..caf6646ada 100644 --- a/docs/mcp-prompts.md +++ b/docs/mcp-prompts.md @@ -6,14 +6,14 @@ invoke tools by themselves. ## Prompt inventory -| Prompt | Purpose | -| --------------------------------- | ------------------------------------------------------------------------------------- | -| `investigate_feature` | Trace a feature from discovery into bounded function evidence. | -| `compare_application_versions` | Compare two shipped artifacts, with optional static and runtime follow-up. | -| `verify_reconstruction` | Evaluate a finite reconstruction specification against retained comparison Evidence. | -| `trace_crash` | Correlate a crash symptom with static paths and optional Process Capture v4 evidence. | -| `audit_residual_unknowns` | Audit current residual-unknown heads and evidence-qualified resolution. | -| `prepare_bounded_process_capture` | Design an approval-gated, bounded process experiment before execution. | +| Prompt | Purpose | +| --------------------------------- | ------------------------------------------------------------------------------------ | +| `investigate_feature` | Trace a feature from discovery into bounded function evidence. | +| `compare_application_versions` | Compare two shipped artifacts, with optional static and runtime follow-up. | +| `verify_reconstruction` | Evaluate a finite reconstruction specification against retained comparison Evidence. | +| `trace_crash` | Correlate a crash symptom with static paths and optional process capture evidence. | +| `audit_residual_unknowns` | Audit current residual-unknown heads and evidence-qualified resolution. | +| `prepare_bounded_process_capture` | Design an approval-gated, bounded process experiment before execution. | Every rendered prompt provides an ordered list of current REA tool names. It also requires the agent to keep observations, inferences, and unknowns @@ -84,7 +84,7 @@ Completion sources are live projections of the current session: | Procedure | Bounded pagination over `list_procedures`; observed addresses are offered from partial results, while names require exhaustive discovery and a unique address. Optional document context is forwarded. | | Provider | `auto` plus sorted deep candidates from the current binary session; target-free completion does not start them. | | Evidence | Evidence IDs retained in the current session ledger. | -| Process capture | Evidence IDs whose operation and validated result identify Process Capture v4. | +| Process capture | Evidence IDs whose operation and validated result identify process capture. | | Artifact manifest | Manifest IDs from schema-valid retained artifact inventories. | | Artifact occurrence | Occurrence IDs present in schema-valid retained artifact inventory pages. | | Residual unknown | Current non-resolved unknown heads only. | diff --git a/docs/process-capture.md b/docs/process-capture.md index 606ebbeff9..a3b2e16ead 100644 --- a/docs/process-capture.md +++ b/docs/process-capture.md @@ -1,4 +1,4 @@ -# Process Capture v4 +# Process capture Process Capture records one approved command as deterministic Evidence. It is intended for authority-versus-reconstruction checks where terminal behavior, @@ -11,7 +11,7 @@ HTTP/WebSocket exchanges, and process exit ownership. Missing or bounded observations remain explicit; a truncated capture is never treated as equivalent to another capture. -Every v4 capture includes a run manifest with canonical SHA-256 commitments for +Every capture includes a run manifest with canonical SHA-256 commitments for the secret-safe full 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 @@ -60,7 +60,7 @@ not a security sandbox: the target runs with the current user's permissions. ## Capture a scenario -`rea capture-process` reads a JSON scenario and writes Process Capture v4 +`rea capture-process` reads a JSON scenario and writes process capture Evidence to stdout: ```bash diff --git a/docs/product-catalog.json b/docs/product-catalog.json index 7acc9a5ea6..0ba1085ecb 100644 --- a/docs/product-catalog.json +++ b/docs/product-catalog.json @@ -1,5 +1,4 @@ { - "catalog_schema_version": 1, "package": { "name": "rea-agents", "version": "3.1.0", @@ -11,7 +10,7 @@ "skill_version": "23" }, "tools": { - "total": 116, + "total": 115, "families": [ { "id": "direct", @@ -168,7 +167,7 @@ { "id": "session", "surface": "session", - "count": 23, + "count": 22, "tools": [ "binary_session", "build_call_path", @@ -181,15 +180,14 @@ "correlate_static_and_runtime", "export_evidence_bundle", "find_changed_behavior", + "get_evidence_bundle", "get_navigation_context", "import_evidence_bundle", "inspect_address_context", "list_unknowns", "open_binary", "record_unknown", - "release_evidence_bundle", "run_replay_machine", - "snapshot_evidence_bundle", "update_unknown", "verify_reconstruction", "verify_unknown_resolution" @@ -430,168 +428,6 @@ "configuration": "detect-only" } ], - "schemas": [ - { - "id": "analysis_snapshot", - "version": 2 - }, - { - "id": "artifact_extraction", - "version": 1 - }, - { - "id": "artifact_graph", - "version": 1 - }, - { - "id": "browser_scenario", - "version": 1 - }, - { - "id": "browser_scenario_capture", - "version": 1 - }, - { - "id": "browser_scenario_diff", - "version": 1 - }, - { - "id": "browser_target_list", - "version": 1 - }, - { - "id": "electron_page_inspection", - "version": 1 - }, - { - "id": "electron_target_list", - "version": 1 - }, - { - "id": "evidence", - "version": 2 - }, - { - "id": "evidence_bundle", - "version": 2 - }, - { - "id": "evidence_completion_ledger", - "version": 1 - }, - { - "id": "evidence_completion_manifest", - "version": 1 - }, - { - "id": "investigation_run", - "version": 1 - }, - { - "id": "investigation_run_summary", - "version": 1 - }, - { - "id": "investigation_workspace", - "version": 1 - }, - { - "id": "javascript_application_analysis", - "version": 2 - }, - { - "id": "javascript_application_graph", - "version": 1 - }, - { - "id": "javascript_application_version_comparison", - "version": 1 - }, - { - "id": "javascript_feature_trace", - "version": 1 - }, - { - "id": "javascript_runtime_observation", - "version": 1 - }, - { - "id": "javascript_runtime_target_list", - "version": 1 - }, - { - "id": "javascript_semantic_graph", - "version": 1 - }, - { - "id": "javascript_semantic_query", - "version": 1 - }, - { - "id": "javascript_semantic_trace", - "version": 1 - }, - { - "id": "managed_artifact_inspection", - "version": 1 - }, - { - "id": "managed_member_comparison", - "version": 1 - }, - { - "id": "managed_member_inspection", - "version": 1 - }, - { - "id": "managed_native_boundary_inspection", - "version": 1 - }, - { - "id": "managed_native_verification", - "version": 1 - }, - { - "id": "process_capture", - "version": 4 - }, - { - "id": "reconstruction_verification", - "version": 1 - }, - { - "id": "residual_unknown", - "version": 1 - }, - { - "id": "web_bundle_analysis", - "version": 1 - }, - { - "id": "web_capture_diff", - "version": 1 - }, - { - "id": "web_mcp_discovery", - "version": 1 - }, - { - "id": "web_observation_session", - "version": 1 - }, - { - "id": "web_page_inspection", - "version": 2 - }, - { - "id": "web_screenshot", - "version": 1 - }, - { - "id": "web_screenshot_diff", - "version": 1 - } - ], "cli": { "primary_count": 68, "commands": [ @@ -674,16 +510,13 @@ "runtime_catalog": { "counts": { "cli_commands": 68, - "mcp_tools": 116, - "mcp_prompts": 6, - "mcp_resources": 2, - "mcp_resource_templates": 11 + "mcp_tools": 115, + "mcp_prompts": 6 }, "digests": { - "tools_sha256": "b21e7a4794bf82b27931a373a7812978b54f136904a88681094f2c545e4413a6", - "prompts_sha256": "3886a3bf55a448def79e3eb429e6a56eb2ba075423c5cb1e5747642b389ef8fe", - "resources_sha256": "e0e872276ebf6f88e916ef24930a99eed27ce4c93e494e60820e9bd8cc8497c3", - "combined_sha256": "6624247db5bcf7b52ce53173bbc0ac11bd51e9217e9e3be4298b755bcc60ea50", + "tools_sha256": "4722f1a2fe1d16d493e4a1f51450376e2cd0c617b9659d292a61908d8bb05fcf", + "prompts_sha256": "77c76df62f92484a43cebf5ca110bdf562c38fbee2531d293eeb51d6e712d459", + "combined_sha256": "94f7cd1ac629a6bbffa77ba3b3d3f2e208e15df821bc0b14db4f81692d6f8eaa", "providers_sha256": "7446b51788734ebf6f4f702e3a5a8c9f0b61967490c245f30bd37b2060827e6b" } } diff --git a/docs/provider-evaluation.md b/docs/provider-evaluation.md index 46d2264c70..063d01321a 100644 --- a/docs/provider-evaluation.md +++ b/docs/provider-evaluation.md @@ -91,7 +91,7 @@ capability from a successful import. | Procedures | Both non-external and external functions are listed. A local thunk remains distinct from its resolved target; exact and qualified name lookup fails on ambiguity rather than guessing. | | Strings | Only Ghidra-defined string `Data` is observed. Items report charset, byte length, and whether a required null terminator is missing. The API cannot distinguish a present terminator from fixed/Pascal layouts when no terminator is missing, so that state is named `present_or_not_required`. | | Memory | Memory-block end addresses are exclusive. Read/write/execute, initialization, overlay, address space, and image base are direct Ghidra observations. | -| Pagination | List limits are 500 and search limits are 100. Pages commit exact totals and advancing offsets; an inventory above one million items fails rather than returning a partial result labeled exhaustive. | +| Inventory | Procedure, symbol, and string listings plus searches return the complete matching collection in one response; callers do not provide offsets or limits. The bridge still enforces the declared transport response ceiling. | | Search | Literal search scans the immutable inventory with a 1,000,000-unit cumulative work budget. Regex uses a conservative finite Java-regex subset with 10,000 static paths, 4,096 UTF-16 code units per candidate, and the same cumulative budget. Exceeding a budget fails explicitly; returned values identify truncation. | | Analysis state | The socket is exposed only after default auto-analysis. A 300-second analysis timeout fails target opening; ordinary established requests have a 10-second client deadline and every response has a 1 MiB ceiling. | diff --git a/docs/reconstruction-obligation-ledgers.md b/docs/reconstruction-obligation-ledgers.md index 3f682e78ef..886527416c 100644 --- a/docs/reconstruction-obligation-ledgers.md +++ b/docs/reconstruction-obligation-ledgers.md @@ -1,13 +1,11 @@ # Reconstruction obligation ledgers -`build_reconstruction_obligation_ledger` turns authenticated Evidence v2 records -into a versioned, deterministic list of reconstruction claims. The same workflow +`build_reconstruction_obligation_ledger` turns authenticated Evidence records +into a deterministic list of reconstruction claims. The same workflow is available as: - MCP tool: `build_reconstruction_obligation_ledger` - CLI command: `rea build-reconstruction-obligation-ledger` -- MCP resource: - `rea://evidence/{evidenceId}/reconstruction-obligation-ledger` The ledger is conservative by design. Static Application Graph facts create candidate obligations; they do not prove runtime or process behavior. A required @@ -29,7 +27,6 @@ never claims closure: rea build-reconstruction-obligation-ledger \ '{ "evidence_bundle": { - "bundle_version": 2, "artifacts": [], "providers": [], "environments": [], @@ -40,7 +37,6 @@ rea build-reconstruction-obligation-ledger \ }, "reviewed_obligations": [], "manifest": { - "schema_version": 1, "bindings": [], "contradictions": [] }, @@ -51,7 +47,7 @@ rea build-reconstruction-obligation-ledger \ ``` For a real investigation, export an Evidence bundle from the session and replace -the empty bundle. Application Graph and Process Capture v4 records generate +the empty bundle. Application Graph and process capture records generate conservative candidates automatically. Add reviewed obligations when a required claim is not represented by those sources. diff --git a/docs/reconstruction-readiness.md b/docs/reconstruction-readiness.md index 40d6491163..4a7bcea969 100644 --- a/docs/reconstruction-readiness.md +++ b/docs/reconstruction-readiness.md @@ -10,10 +10,10 @@ npm run verify:readiness The command builds the redistributable native conformance fixtures, inventories the native executable through the public CLI, analyzes the generated JavaScript -CLI and Electron fixture through both CLI and MCP, verifies exact advertised -limits, evaluates the same nine-stage report through both surfaces, reads the -full MCP report resource, and proves stale/tampered replay rejection. It prints -one compact JSON summary. +CLI and Electron fixture through both CLI and MCP, evaluates the same nine-stage +report through both surfaces, verifies that MCP returns the complete report +inline, and proves stale/tampered replay rejection. It prints one compact JSON +summary. Set `REA_READINESS_REPORT_PATH` to retain the complete machine-readable report: @@ -28,13 +28,7 @@ full report as the `reconstruction-readiness` artifact. - CLI: `rea evaluate-reconstruction-readiness --json` - MCP tool: `evaluate_reconstruction_readiness` -- Full MCP resource: - `rea://evidence/{evidenceId}/reconstruction-readiness-report` - -The MCP tool result contains only report identity, status, summary, metrics, and -the resource URI. The full Evidence bundle, stage records, comparisons, -contradictions, obligation ledger, and replay inputs stay in the retained -resource instead of consuming the tool-response context. + The MCP tool returns the complete report inline, including the Evidence bundle, stage records, comparisons, contradictions, obligation ledger, and replay inputs. ## Required stages diff --git a/docs/user-visible-errors.csv b/docs/user-visible-errors.csv index 0af71f3d08..f1ada69cfe 100644 --- a/docs/user-visible-errors.csv +++ b/docs/user-visible-errors.csv @@ -73,8 +73,7 @@ harm_rank,location,trigger,current_copy,user_risk,proposed_replacement,implement 62,src/application/ProcessCli.ts:readJson size,Process scenario or evidence file exceeds 64 MiB,Process JSON input exceeds byte limit,Does not state limit or recovery,"Process input file is too large. Reduce it below 64 MiB, then try again.",implemented,verified by focused sparse-file CLI test 63,src/application/ProcessCli.ts:readJson parse,Process scenario or evidence file is malformed JSON,Raw JSON parser exception through CLI framework,Can expose parser implementation and lacks recovery,"Process input file is not valid JSON. Repair the file, then try again.",implemented,verified by focused CLI test 64,src/application/ProcessCli.ts:capture scenario parse,Scenario fails Process Capture schema,Raw Zod validation exception through CLI framework,Exposes schema internals and field paths without stable recovery,"Process scenario is invalid. Check its required fields and limits, then try again.",implemented,verified by focused CLI test -65,src/application/ProcessCli.ts:legacy evidence,Comparison receives Process Capture v3 Evidence,"Process Capture v3 is unsupported. Re-run the scenario with this REA version using capture_process_scenario to produce Process Capture v4; captures cannot be upgraded because v4 requires new manifest and settlement evidence.",Long but accurately explains why recapture is required and gives exact tool recovery,Keep current copy,unchanged,verified by focused CLI test -66,src/application/ProcessCli.ts:wrong evidence,Comparison receives valid Evidence from another workflow,Expected REA Process Capture v4 Evidence,Uses internal schema name and does not explain recovery,"Capture evidence is not from the current process-capture workflow. Create new capture evidence, then try again.",implemented,verified by focused CLI test +66,src/application/ProcessCli.ts:wrong evidence,Comparison receives valid Evidence from another workflow,Expected REA process capture Evidence,Uses internal schema name and does not explain recovery,"Capture evidence is not from the current process-capture workflow. Create new capture evidence, then try again.",implemented,verified by focused CLI test 67,src/application/ProcessCli.ts:unexpected,Unexpected parser/comparison/canonicalization failure escapes expected classifications,Raw thrown exception through CLI framework,Can expose stack or internal invariant,"Process command could not complete. Check the input files and run `rea doctor`, then try again.",implemented,verified by direct unexpected-cause projection test 68,src/server/registerEvidenceTools.ts:object guard,Validated provider-tool input is unexpectedly not an object,Provider tool input was not an object,Exposes provider architecture and implies caller can fix impossible state,Remove the impossible duplicate guard and parse through the declared JSON-object schema.,removed,verified by typecheck and MCP integration tests 69,src/server/registerEnhancedTools.ts:object guard,Validated enhanced-tool input is unexpectedly not an object,Validated enhanced input was not a JSON object,Exposes validation/JSON implementation detail,Remove the impossible duplicate guard and parse through the declared JSON-object schema.,removed,verified by typecheck and enhanced MCP integration tests diff --git a/docs/verification/managed-conformance-ledger.json b/docs/verification/managed-conformance-ledger.json index aa1f6f7331..e324782268 100644 --- a/docs/verification/managed-conformance-ledger.json +++ b/docs/verification/managed-conformance-ledger.json @@ -1,103 +1,103 @@ { "schema_version": 1, - "ledger_id": "ecl_a56a75b91375c9c9501d1545fee9977e74f57dbd1bf413a370f9cd1ed26987bd", + "ledger_id": "ecl_2d5c1c83c1fd56615a663bcb3a432b7023afa316133b744c64dcaa659cab53c0", "records": [ { "claim_id": "managed.application-graph-projection", "status": "pass", "evidence_ids": [ - "ev_4d6821cdd212a77507dfbdf995fc8b086cd63b3f1d39dee4a2e12f62a6f0609d" + "ev_0c73f33f51048a7c7cc5d908cb951512ee9f3d9dcf4124f0f0eb2c4a88ceb7cc" ] }, { "claim_id": "managed.decompiler-reconstruction-import", "status": "pass", "evidence_ids": [ - "ev_cd9015f39a60251bee1b01baf5189de7427e5810f130aed39770f17ae69cee44" + "ev_0504a7fc4cc8f77ca07a3aa59d62830b5769c7b41e7518677771fe7aa54c7b5d" ] }, { "claim_id": "managed.dotnet-framework-x86-pinvoke", "status": "pass", "evidence_ids": [ - "ev_af02c0218a01138bd1f0f5ca052f95d348dfacb540040ab72d6ddc9889e3a7e4" + "ev_9b63cdeef9d48e567dc8f4de9fe6b424e94929ac1f17aafd0ef1807775f72d96" ] }, { "claim_id": "managed.ilspy-reconstruction-oracle", "status": "unsupported", "evidence_ids": [ - "ev_5df12074aeb26d67bc954fd9230076bd0c3ce9969600e19c59ba02090a9988f2" + "ev_4e3fbc7203c29aab5d9119332a09c14e285e85007b3d7fc7433880b39a507435" ] }, { "claim_id": "managed.malformed-metadata", "status": "pass", "evidence_ids": [ - "ev_5d6aadf199ae090e0ddebc10a51aab8a410fa778a6ae8454fedfb10d240cdac2" + "ev_dbd885adc65f9cc8abacb04642db609d2180b0af71adc0b0732719f06a057063" ] }, { "claim_id": "managed.managed-native-verification", "status": "pass", "evidence_ids": [ - "ev_9f1862276fe8869b86105eb91154603922eeb95fec33a10c354b2d6c9c3fe077" + "ev_e7841bf63d7b83804987d21f4f432752870ff7338862360bbcf54653eb782731" ] }, { "claim_id": "managed.modern-dotnet-anycpu", "status": "pass", "evidence_ids": [ - "ev_c9aef74724cf555bcedce8a9dbf46327b2f92b95b03eb363f966885d429e6882" + "ev_9593b026617002c64d0618ec079d42dbc0ddeef7cd53f2f8b2c8fca9ffebb2a9" ] }, { "claim_id": "managed.mvid-and-token-drift", "status": "pass", "evidence_ids": [ - "ev_55808bf3ee5ec9d87cee751462077a6bce88701c4fcf66822ba1d7d33706706b" + "ev_ba32694a35810acd211745efdf41c88887f4931efb6027e876eea3e8e506aee0" ] }, { "claim_id": "managed.not-managed", "status": "pass", "evidence_ids": [ - "ev_a8166506ca91a4595b825f355836bb4becf35852c8547c55408c09698f4953a6" + "ev_ac700cf6c8efdda7f689b29a9c3d5a679ecb24893f93bb1c76e50e23b2b9dcbb" ] }, { "claim_id": "managed.operator-local-manifest", "status": "unsupported", "evidence_ids": [ - "ev_03d1a151446834fbee7c093e82121b714a0cc1e6167ad84f47a79ffb9e2602ce" + "ev_f96f07bc28f2e6da5a71597f9a38f5eaa7cde0217f0df10d6ef6d655937fc1a2" ] }, { "claim_id": "managed.operator-manifest-self-test", "status": "pass", "evidence_ids": [ - "ev_74d7f9c75a4476196664542d790e2532435f2a1c54349b481967e51e2ccc9453" + "ev_ed0f3ff1749f0927d493609423a366ec6a432f016c767aeeedd9b4a520672eaf" ] }, { "claim_id": "managed.runtime-correlation-admission-plan", "status": "pass", "evidence_ids": [ - "ev_5a80df0b92dc2280361e900ce590bc88ea52eba3dc8e216a0ce282f503e3cb05" + "ev_24a622e16a885e2d21025f51c3f4b5900719c21d9f0d04ba1d55f6093a702c20" ] }, { "claim_id": "managed.unicode-obfuscated-identifiers", "status": "pass", "evidence_ids": [ - "ev_3b61c79ec152c70693278a70ad2ca6528ce0a9c9ab389d3ec9e4520de79082a7" + "ev_2e9bc5213917635c3eb3d094449adf088c450c07d078dcb26312182c04966bc9" ] }, { "claim_id": "managed.x64-ready-to-run-native-body", "status": "pass", "evidence_ids": [ - "ev_81f41b1b3809c2fe1964f7abbcbd2faeb14c723938639c2e0bb16cd58746aa1a" + "ev_bbf3dd8daec6d46d16ac7befc3875572e7103b27b815f81903e3dca61880c70b" ] } ], diff --git a/docs/verification/managed-conformance-manifest.json b/docs/verification/managed-conformance-manifest.json index ec0c2862b5..d3fd13858e 100644 --- a/docs/verification/managed-conformance-manifest.json +++ b/docs/verification/managed-conformance-manifest.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "manifest_id": "ecm_1b79ae0f4063ccac065a4eff5dec420f968ea39bc4d93eb3bddcaaf318eb01a6", + "manifest_id": "ecm_3a42d32a96315338e06700b64afc0367603e2c5050b1ec0bf1ce012e227b4df3", "verifier": { "id": "rea-managed-conformance", "version": "1" @@ -14,7 +14,7 @@ "skill_digests": [ { "skill_id": "reverse-engineer-anything", - "sha256": "709a1ace114ea7ffa6f36a67c2f2df9ffa1029c2cad8508aebf40c5105862643" + "sha256": "89b09782340415790ecf161a5bc33f60e1a23cd66e0f4c29dd26e959b2baa0a9" } ], "claims": [ diff --git a/scripts/build-conformance-fixtures.mjs b/scripts/build-conformance-fixtures.mjs index f0d5c594c0..415cb7b0bc 100644 --- a/scripts/build-conformance-fixtures.mjs +++ b/scripts/build-conformance-fixtures.mjs @@ -103,9 +103,9 @@ async function buildPortableFixtures() { join(outputRoot, "large"), ], expectations: { - symbolPrefix: `${symbolPrefix}rea_page_`, + symbolPrefix: `${symbolPrefix}rea_inventory_`, symbolCount: LARGE_FIXTURE_COUNT, - stringPrefix: "REA_PAGE_", + stringPrefix: "REA_INVENTORY_", stringCount: LARGE_FIXTURE_COUNT, }, }); diff --git a/scripts/lib/catalog-schemas.mjs b/scripts/lib/catalog-schemas.mjs deleted file mode 100644 index d0b38a73c8..0000000000 --- a/scripts/lib/catalog-schemas.mjs +++ /dev/null @@ -1,264 +0,0 @@ -import { z } from "zod"; - -const valuesAt = (node, path) => { - if (typeof node !== "object" || node === null) return []; - if ("anyOf" in node && Array.isArray(node.anyOf)) - return node.anyOf.flatMap((alternative) => valuesAt(alternative, path)); - if ("oneOf" in node && Array.isArray(node.oneOf)) - return node.oneOf.flatMap((alternative) => valuesAt(alternative, path)); - if (path.length === 0) - return "const" in node && - (typeof node.const === "number" || typeof node.const === "string") - ? [node.const] - : []; - if ( - !("properties" in node) || - typeof node.properties !== "object" || - node.properties === null - ) - return []; - const [segment, ...remaining] = path; - return segment !== undefined && segment in node.properties - ? valuesAt(node.properties[segment], remaining) - : []; -}; - -const versionAt = (schema, path) => { - const versions = [ - ...new Set( - valuesAt(z.toJSONSchema(schema, { unrepresentable: "any" }), path).map( - String, - ), - ), - ]; - if (versions.length !== 1) - throw new Error( - `Schema version path ${path.join(".")} has ${String(versions.length)} constant values`, - ); - const version = versions[0]; - if (version === undefined) throw new Error("Schema version disappeared"); - return /^\d+$/u.test(version) ? Number(version) : version; -}; - -const durableSchemaDefinitions = (sources) => [ - [ - "analysis_snapshot", - sources.analysisSnapshot.analysisSnapshotSchema, - ["snapshot_version"], - ], - [ - "artifact_graph", - sources.artifactGraph.artifactInventoryResultSchema, - ["manifest", "schema_version"], - ], - [ - "artifact_extraction", - sources.artifactGraph.artifactExtractionResultSchema, - ["extraction_manifest", "schema_version"], - ], - [ - "browser_scenario", - sources.browserScenario.browserScenarioSchema, - ["schema_version"], - ], - ["evidence", sources.evidence.evidenceSchema, ["schema_version"]], - [ - "evidence_bundle", - sources.evidenceBundle.evidenceBundleSchema, - ["bundle_version"], - ], - [ - "evidence_completion_ledger", - sources.evidenceCompletion.evidenceCompletionLedgerSchema, - ["schema_version"], - ], - [ - "evidence_completion_manifest", - sources.completionGeneration.completionManifestSchema, - ["schema_version"], - ], - [ - "investigation_run", - sources.investigationWorkspace.investigationRunSchema, - ["schema_version"], - ], - [ - "investigation_run_summary", - sources.investigationWorkspace.investigationRunSummarySchema, - ["schema_version"], - ], - [ - "investigation_workspace", - sources.investigationWorkspace.investigationWorkspaceSchema, - ["workspace_version"], - ], - [ - "javascript_application_graph", - sources.javascriptApplicationGraph.javascriptApplicationGraphSchema, - ["schema_version"], - ], - [ - "javascript_application_version_comparison", - sources.javascriptVersionComparison - .applicationVersionComparisonResultSchema, - ["schema_version"], - ], - [ - "javascript_semantic_graph", - sources.javascriptSemanticGraph.javaScriptSemanticGraphSchema, - ["schema_version"], - ], - [ - "javascript_semantic_query", - sources.javascriptSemanticQuery.javaScriptSemanticQueryResultSchema, - ["schema_version"], - ], - [ - "javascript_semantic_trace", - sources.javascriptSemanticTrace.javaScriptSemanticTraceResultSchema, - ["schema_version"], - ], - [ - "javascript_feature_trace", - sources.javascriptFeatureTrace.applicationFeatureTraceResultSchema, - ["schema_version"], - ], - [ - "process_capture", - sources.processCapture.processCaptureSchema, - ["schema_version"], - ], - [ - "reconstruction_verification", - sources.reconstructionVerification.reconstructionSpecificationSchema, - ["schema_version"], - ], - [ - "residual_unknown", - sources.residualUnknown.residualUnknownSchema, - ["registry_version"], - ], -]; - -const browserScenarioObservationSchemaDefinitions = (sources) => [ - [ - "browser_scenario_capture", - sources.browserScenarioCapture.browserScenarioCaptureSchema, - ["schema_version"], - ], - [ - "browser_scenario_diff", - sources.browserScenarioDiff.browserScenarioDiffSchema, - ["schema_version"], - ], -]; - -const observationSchemaDefinitions = (sources) => [ - [ - "managed_artifact_inspection", - sources.managedArtifact.managedArtifactInspectionSchema, - ["schema_version"], - ], - [ - "managed_member_inspection", - sources.managedArtifact.managedMemberInspectionSchema, - ["schema_version"], - ], - [ - "managed_native_boundary_inspection", - sources.managedArtifact.managedNativeBoundaryInspectionSchema, - ["schema_version"], - ], - [ - "managed_member_comparison", - sources.managedComparison.managedMemberComparisonResultSchema, - ["schema_version"], - ], - [ - "managed_native_verification", - sources.managedNativeVerification.managedNativeVerificationResultSchema, - ["schema_version"], - ], - [ - "browser_target_list", - sources.browserObservation.browserTargetListSchema, - ["schema_version"], - ], - ...browserScenarioObservationSchemaDefinitions(sources), - [ - "electron_page_inspection", - sources.electronObservation.electronPageInspectionSchema, - ["schema_version"], - ], - [ - "electron_target_list", - sources.electronObservation.electronTargetListSchema, - ["schema_version"], - ], - [ - "javascript_application_analysis", - sources.javascriptApplicationAnalysis - .javaScriptApplicationAnalysisResultV2Schema, - ["schema_version"], - ], - [ - "javascript_runtime_observation", - sources.javascriptRuntimeObservation.javascriptRuntimeObservationSchema, - ["schema_version"], - ], - [ - "javascript_runtime_target_list", - sources.javascriptRuntimeObservation.javascriptRuntimeTargetListSchema, - ["schema_version"], - ], - [ - "web_bundle_analysis", - sources.webBundleAnalysis.webBundleAnalysisSchema, - ["schema_version"], - ], - [ - "web_capture_diff", - sources.webCaptureDiff.webCaptureDiffSchema, - ["schema_version"], - ], - [ - "web_mcp_discovery", - sources.webMcpDiscovery.webMcpDiscoverySchema, - ["schema_version"], - ], - [ - "web_observation_session", - sources.browserSession.webObservationSessionSchema, - ["schema_version"], - ], - [ - "web_page_inspection", - sources.browserObservation.webPageInspectionSchema, - ["schema_version"], - ], - [ - "web_screenshot", - sources.webScreenshot.webScreenshotSchema, - ["schema_version"], - ], - [ - "web_screenshot_diff", - sources.webScreenshot.webScreenshotDiffSchema, - ["schema_version"], - ], -]; - -/** Derive the catalog of durable and observation schema versions. */ -export const schemaCatalog = (sources) => - [ - ...durableSchemaDefinitions(sources), - ...observationSchemaDefinitions(sources), - ] - .map(([id, schema, path]) => { - try { - return { id, version: versionAt(schema, path) }; - } catch (cause) { - throw new Error(`Could not derive ${id} schema version`, { cause }); - } - }) - .sort((left, right) => left.id.localeCompare(right.id)); diff --git a/scripts/lib/conformance-fixtures.mjs b/scripts/lib/conformance-fixtures.mjs index 66e80b7c24..4f82fb2427 100644 --- a/scripts/lib/conformance-fixtures.mjs +++ b/scripts/lib/conformance-fixtures.mjs @@ -21,12 +21,12 @@ export const generateLargeFixture = (count = LARGE_FIXTURE_COUNT) => { const declarations = Array.from( { length: count }, (_, index) => - `__attribute__((noinline, used)) int rea_page_${String(index).padStart(4, "0")}(void) { puts("REA_PAGE_${String(index).padStart(4, "0")}"); return ${index}; }`, + `__attribute__((noinline, used)) int rea_inventory_${String(index).padStart(4, "0")}(void) { puts("REA_INVENTORY_${String(index).padStart(4, "0")}"); return ${index}; }`, ); return [ "#include ", ...declarations, - "int main(void) { return rea_page_0000(); }", + "int main(void) { return rea_inventory_0000(); }", "", ].join("\n"); }; diff --git a/scripts/lib/docs-facts.mjs b/scripts/lib/docs-facts.mjs index 0aed20f378..3db7269366 100644 --- a/scripts/lib/docs-facts.mjs +++ b/scripts/lib/docs-facts.mjs @@ -56,23 +56,6 @@ export const documentationFactIssues = async (root, catalog) => { requireText(issues, templatePath, template, "docs/product-catalog.json"); const english = await readFile(join(root, "README.md"), "utf8"); - const schemaVersion = (id) => { - const schema = catalog.schemas.find((candidate) => candidate.id === id); - if (schema === undefined) throw new Error(`Missing ${id} catalog schema`); - return String(schema.version); - }; - requireText( - issues, - "README.md", - english, - `Evidence v${schemaVersion("evidence")}`, - ); - requireText( - issues, - "README.md", - english, - `Process Capture v${schemaVersion("process_capture")}`, - ); requireText(issues, "README.md", english, "docs/product-catalog.json"); return issues; }; diff --git a/scripts/lib/managed-conformance-config.mjs b/scripts/lib/managed-conformance-config.mjs index 126222071a..352f0443d4 100644 --- a/scripts/lib/managed-conformance-config.mjs +++ b/scripts/lib/managed-conformance-config.mjs @@ -41,14 +41,6 @@ export const nativeBoundaryLimits = { maxHeapItemBytes: 1024 * 1024, }; -export const applicationGraphLimits = { - max_types: 100, - max_methods: 100, - max_fields: 100, - max_pinvoke_imports: 100, - max_native_implementations: 100, -}; - export const comparisonLimits = { max_method_matches: 100, max_field_matches: 100, @@ -60,13 +52,6 @@ export const defaultIlBody = Buffer.from([ ]); export function functionDossier(name) { - const emptyPage = { - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }; return { procedure: { address: "0x401000", @@ -80,23 +65,16 @@ export function functionDossier(name) { signature: null, locals: [], }, - pseudocode: { - text: "", - total_chars: 0, - returned_chars: 0, - truncated: false, - next_offset: null, - }, - assembly: emptyPage, - comments: emptyPage, - callers: emptyPage, - callees: emptyPage, - incoming_references: emptyPage, - outgoing_references: emptyPage, - referenced_strings: emptyPage, - referenced_names: emptyPage, - basic_blocks: emptyPage, - instruction_scan: { scanned: 0, truncated: false }, + pseudocode: "", + assembly: [], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [], limitations: [], }; } diff --git a/scripts/lib/managed-conformance-manifest.mjs b/scripts/lib/managed-conformance-manifest.mjs index 783abbeb55..7fe8afa658 100644 --- a/scripts/lib/managed-conformance-manifest.mjs +++ b/scripts/lib/managed-conformance-manifest.mjs @@ -202,13 +202,6 @@ function verifyManagedAppManifestApplicationGraph({ case_sensitive: expectedTrace.case_sensitive, }, direction: "incoming", - limits: { - max_seed_matches: 10, - max_depth: 4, - max_nodes: 100, - max_edges: 200, - max_paths: 20, - }, }); ensure( traced.ok, @@ -245,11 +238,8 @@ function verifyManagedAppManifestApplicationGraph({ } const projectManifestMethod = (state, token) => { - const { - appManifestInspectionLimits, - appManifestMemberLimits, - applicationGraphLimits, - } = state.context; + const { appManifestInspectionLimits, appManifestMemberLimits } = + state.context; const existing = state.graphByToken.get(token); if (existing !== undefined) return existing; const method = state.inspectedMethods.get(token); @@ -289,7 +279,6 @@ const projectManifestMethod = (state, token) => { const projected = projectManagedApplicationGraphEvidence({ managed_artifact: artifactEvidence, managed_members: memberEvidence, - limits: applicationGraphLimits, }); ensure( projected.ok, @@ -316,7 +305,7 @@ function inspectManagedMethodByToken(context, bytes, target, expectedMethod) { target, expectedMethod.token, ); - const method = members.methods.items.find( + const method = members.methods.find( ({ token }) => token === expectedMethod.token, ); ensure( diff --git a/scripts/lib/managed-conformance-oracles.mjs b/scripts/lib/managed-conformance-oracles.mjs index cd6ae48082..ba73622fc3 100644 --- a/scripts/lib/managed-conformance-oracles.mjs +++ b/scripts/lib/managed-conformance-oracles.mjs @@ -39,7 +39,7 @@ async function runManagedAppManifestSelfTest(context) { sample.target, context.memberLimits, ); - const method = members.methods.items[0]; + const method = members.methods[0]; assert.ok(method); const summary = await context.verifyManagedAppManifest( { @@ -143,7 +143,7 @@ async function runOptionalIlspyOracle(context) { sample.target, context.memberLimits, ); - const method = members.methods.items[0]; + const method = members.methods[0]; ensureIlspy(method !== undefined, "source-owned fixture has no method"); const listOutput = await runIlspy( ilspyPath, diff --git a/scripts/lib/mcp-verifier-results.mjs b/scripts/lib/mcp-verifier-results.mjs index d4b3bb093a..f9e2d70806 100644 --- a/scripts/lib/mcp-verifier-results.mjs +++ b/scripts/lib/mcp-verifier-results.mjs @@ -19,35 +19,29 @@ export const requireMcpResult = (result, operation) => { return value.result; }; -/** Verify direct-provider provenance through the complete Evidence resource. */ -export const requireEvidenceProvider = async ( - client, - result, - operation, - providerId, -) => { - const evidence = await readMcpEvidence(client, result, operation); +/** Verify provider identity directly from the tool result. */ +export const requireEvidenceProvider = (result, operation, providerId) => { + const evidence = jsonValue(result); if ( - evidence?.provider?.id !== providerId || - evidence?.analysis_profile?.provider?.id !== providerId || - typeof evidence.analysis_profile.provider.version !== "string" + evidence?.evidence?.provider?.id !== providerId || + evidence?.evidence?.analysis_profile?.provider?.id !== providerId || + typeof evidence.evidence.analysis_profile.provider.version !== "string" ) { throw new Error(`${operation} omitted its concrete provider provenance`); } }; -/** Verify composed-workflow and upstream provenance through full Evidence. */ -export const requireWorkflowEvidenceProvider = async ( - client, +/** Verify composed workflow and upstream provider provenance inline. */ +export const requireWorkflowEvidenceProvider = ( result, operation, expected, ) => { - const evidence = await readMcpEvidence(client, result, operation); - const profile = evidence?.analysis_profile; + const evidence = jsonValue(result); + const profile = evidence?.evidence?.analysis_profile; const upstream = profile?.parameters?.upstream_analysis_profile; if ( - evidence?.provider?.id !== expected.workflowProviderId || + evidence?.evidence?.provider?.id !== expected.workflowProviderId || profile?.provider?.id !== expected.workflowProviderId || upstream?.provider?.id !== expected.upstreamProviderId || typeof upstream.provider.version !== "string" @@ -57,35 +51,3 @@ export const requireWorkflowEvidenceProvider = async ( ); } }; - -const readMcpEvidence = async (client, result, operation) => { - const compact = jsonValue(result); - if ( - compact === null || - typeof compact !== "object" || - typeof compact.evidence_id !== "string" || - compact.evidence_uri !== `rea://evidence/${compact.evidence_id}` - ) { - throw new Error(`${operation} omitted its Evidence reference`); - } - const resource = await client.readResource({ uri: compact.evidence_uri }); - const text = resource.contents.find( - (content) => - content.uri === compact.evidence_uri && typeof content.text === "string", - )?.text; - if (text === undefined) - throw new Error(`${operation} Evidence resource omitted JSON text`); - const evidence = JSON.parse(text); - if ( - evidence === null || - typeof evidence !== "object" || - evidence.evidence_id !== compact.evidence_id || - JSON.stringify(evidence.normalized_result) !== - JSON.stringify(compact.result) - ) { - throw new Error( - `${operation} Evidence resource did not match its projection`, - ); - } - return evidence; -}; diff --git a/scripts/lib/product-catalog.d.mts b/scripts/lib/product-catalog.d.mts index b0a5336d5e..b260cd2e6d 100644 --- a/scripts/lib/product-catalog.d.mts +++ b/scripts/lib/product-catalog.d.mts @@ -1,5 +1,4 @@ export interface ProductCatalog { - readonly catalog_schema_version: number; readonly package: { readonly name: string; readonly version: string; diff --git a/scripts/lib/product-catalog.mjs b/scripts/lib/product-catalog.mjs index b676f28d85..9ed2111e66 100644 --- a/scripts/lib/product-catalog.mjs +++ b/scripts/lib/product-catalog.mjs @@ -7,7 +7,6 @@ import { cliCommandOptionNames, } from "./catalog-cli.mjs"; import { providerCatalog, toolFamilyCatalog } from "./catalog-builders.mjs"; -import { schemaCatalog } from "./catalog-schemas.mjs"; export { createCliInventory, @@ -31,7 +30,6 @@ export const createProductCatalog = async (root) => { const providers = providerCatalog(sources); const metadata = sources.packageMetadata.PACKAGE_METADATA; return { - catalog_schema_version: 1, package: { name: metadata.name, version: metadata.version, @@ -52,7 +50,6 @@ export const createProductCatalog = async (root) => { configuration: format === "unsupported" ? "detect-only" : "managed", }), ), - schemas: schemaCatalog(sources), cli: { primary_count: cli.primary.length, commands: cli.primary, diff --git a/scripts/lib/real-hopper-exhaustive-search.d.mts b/scripts/lib/real-hopper-exhaustive-search.d.mts new file mode 100644 index 0000000000..5f28a21778 --- /dev/null +++ b/scripts/lib/real-hopper-exhaustive-search.d.mts @@ -0,0 +1,21 @@ +interface ToolClient { + callTool(request: unknown, options: unknown): Promise; +} + +interface SearchSummary { + readonly count: number; + readonly calls: 1; +} + +export function openAndVerifyLargeFixture(input: { + readonly client: ToolClient; + readonly options: unknown; + readonly normalizedResult: (value: unknown, operation: string) => unknown; + readonly path: string; + readonly expectedCount: number; + readonly symbolPrefix: string; + readonly stringPrefix: string; +}): Promise<{ + readonly procedures: SearchSummary; + readonly strings: SearchSummary; +}>; diff --git a/scripts/lib/real-hopper-exhaustive-search.mjs b/scripts/lib/real-hopper-exhaustive-search.mjs new file mode 100644 index 0000000000..1959aef572 --- /dev/null +++ b/scripts/lib/real-hopper-exhaustive-search.mjs @@ -0,0 +1,83 @@ +/** Open the large fixture and verify complete inline search results. */ +export async function openAndVerifyLargeFixture({ + client, + options, + normalizedResult, + path, + expectedCount, + symbolPrefix, + stringPrefix, +}) { + const opened = await client.callTool( + { name: "open_binary", arguments: { path } }, + options, + ); + if (opened.isError === true) + throw new Error("Hopper rejected the large fixture"); + const procedures = await collectAllMatches({ + client, + options, + normalizedResult, + tool: "search_procedures", + pattern: symbolPrefix.replace(/^_+/u, ""), + expectedPrefix: symbolPrefix.replace(/^_+/u, ""), + expectedCount, + normalize: (value) => value.replace(/^_+/u, ""), + }); + const strings = await collectAllMatches({ + client, + options, + normalizedResult, + tool: "search_strings", + pattern: stringPrefix, + expectedPrefix: stringPrefix, + expectedCount, + normalize: (value) => value, + }); + return { procedures, strings }; +} + +async function collectAllMatches({ + client, + options, + normalizedResult, + tool, + pattern, + expectedPrefix, + expectedCount, + normalize, +}) { + const matches = normalizedResult( + await client.callTool( + { + name: tool, + arguments: { pattern, mode: "literal", case_sensitive: true }, + }, + options, + ), + tool, + ); + if (!Array.isArray(matches) || matches.length !== expectedCount) + throw new Error(`${tool} did not return every expected match`); + const addresses = new Set(); + const values = new Set(); + for (const item of matches) { + const value = normalize(item.value); + if ( + typeof item.address !== "string" || + !/^0x[0-9a-f]+$/iu.test(item.address) + ) + throw new Error(`${tool} returned a malformed address`); + if (addresses.has(item.address) || values.has(value)) + throw new Error(`${tool} returned duplicate matches`); + addresses.add(item.address); + values.add(value); + } + const expectedValues = Array.from( + { length: expectedCount }, + (_, index) => `${expectedPrefix}${String(index).padStart(4, "0")}`, + ); + if (expectedValues.some((value) => !values.has(value))) + throw new Error(`${tool} omitted expected matches`); + return { count: values.size, calls: 1 }; +} diff --git a/scripts/lib/real-hopper-fixture.mjs b/scripts/lib/real-hopper-fixture.mjs index 1c1d955d91..da2c7012c9 100644 --- a/scripts/lib/real-hopper-fixture.mjs +++ b/scripts/lib/real-hopper-fixture.mjs @@ -69,7 +69,7 @@ function requireLargeOracle(largeOracle) { largeOracle.symbolCount !== largeOracle.stringCount || largeOracle.symbolCount <= 0 ) - throw new Error("Large fixture omitted its exact pagination oracle"); + throw new Error("Large fixture omitted its complete-inventory oracle"); return largeOracle; } diff --git a/scripts/lib/real-hopper-pagination.d.mts b/scripts/lib/real-hopper-pagination.d.mts deleted file mode 100644 index 784a77e9d2..0000000000 --- a/scripts/lib/real-hopper-pagination.d.mts +++ /dev/null @@ -1,33 +0,0 @@ -interface ToolClient { - callTool(request: unknown, options: unknown): Promise; -} - -interface PaginationSummary { - readonly count: number; - readonly pages: number; -} - -export function verifyLargeFixturePagination(input: { - readonly client: ToolClient; - readonly options: unknown; - readonly normalizedResult: (value: unknown, operation: string) => unknown; - readonly expectedCount: number; - readonly symbolPrefix: string; - readonly stringPrefix: string; -}): Promise<{ - readonly procedures: PaginationSummary; - readonly strings: PaginationSummary; -}>; - -export function openAndVerifyLargeFixture(input: { - readonly client: ToolClient; - readonly options: unknown; - readonly normalizedResult: (value: unknown, operation: string) => unknown; - readonly path: string; - readonly expectedCount: number; - readonly symbolPrefix: string; - readonly stringPrefix: string; -}): Promise<{ - readonly procedures: PaginationSummary; - readonly strings: PaginationSummary; -}>; diff --git a/scripts/lib/real-hopper-pagination.mjs b/scripts/lib/real-hopper-pagination.mjs deleted file mode 100644 index f9408292af..0000000000 --- a/scripts/lib/real-hopper-pagination.mjs +++ /dev/null @@ -1,138 +0,0 @@ -const PAGE_LIMIT = 100; - -/** Open the large fixture and exhaustively prove its public search pages. */ -export async function openAndVerifyLargeFixture({ - client, - options, - normalizedResult, - path, - expectedCount, - symbolPrefix, - stringPrefix, -}) { - const opened = await client.callTool( - { name: "open_binary", arguments: { path } }, - options, - ); - if (opened.isError === true) - throw new Error("Hopper rejected the large fixture"); - return verifyLargeFixturePagination({ - client, - options, - normalizedResult, - expectedCount, - symbolPrefix, - stringPrefix, - }); -} - -/** Exhaustively prove the source-owned large fixture through public search pages. */ -export async function verifyLargeFixturePagination({ - client, - options, - normalizedResult, - expectedCount, - symbolPrefix, - stringPrefix, -}) { - const procedures = await collectExactPages({ - client, - options, - normalizedResult, - tool: "search_procedures", - pattern: symbolPrefix.replace(/^_+/u, ""), - expectedPrefix: symbolPrefix.replace(/^_+/u, ""), - expectedCount, - normalize: (value) => value.replace(/^_+/u, ""), - }); - const strings = await collectExactPages({ - client, - options, - normalizedResult, - tool: "search_strings", - pattern: stringPrefix, - expectedPrefix: stringPrefix, - expectedCount, - normalize: (value) => value, - }); - return { procedures, strings }; -} - -async function collectExactPages({ - client, - options, - normalizedResult, - tool, - pattern, - expectedPrefix, - expectedCount, - normalize, -}) { - const seenAddresses = new Set(); - const seenValues = new Set(); - let offset = 0; - let pages = 0; - while (true) { - const page = normalizedResult( - await client.callTool( - { - name: tool, - arguments: { - pattern, - mode: "literal", - case_sensitive: true, - offset, - limit: PAGE_LIMIT, - }, - }, - options, - ), - `${tool} offset ${offset}`, - ); - validatePage(page, { offset, expectedCount }); - for (const item of page.items) { - const value = normalize(item.value); - if (item.value_truncated || !/^0x[0-9a-f]+$/iu.test(item.address)) - throw new Error(`${tool} returned truncated or malformed evidence`); - if (seenAddresses.has(item.address) || seenValues.has(value)) - throw new Error(`${tool} returned duplicate evidence`); - seenAddresses.add(item.address); - seenValues.add(value); - } - pages += 1; - if (page.next_offset === null) break; - offset = page.next_offset; - } - const expectedValues = Array.from( - { length: expectedCount }, - (_, index) => `${expectedPrefix}${String(index).padStart(4, "0")}`, - ); - if ( - seenValues.size !== expectedCount || - expectedValues.some((value) => !seenValues.has(value)) - ) - throw new Error(`${tool} did not exhaustively prove the fixture values`); - return { count: seenValues.size, pages }; -} - -function validatePage(page, { offset, expectedCount }) { - if ( - page === null || - typeof page !== "object" || - !Array.isArray(page.items) || - page.offset !== offset || - page.limit !== PAGE_LIMIT || - page.total !== expectedCount || - page.items.length !== Math.min(PAGE_LIMIT, expectedCount - offset) - ) - throw new Error("Hopper returned an inconsistent fixture search page"); - const expectedNext = - offset + page.items.length < expectedCount - ? offset + page.items.length - : null; - if ( - page.next_offset !== expectedNext || - page.has_more !== (expectedNext !== null) - ) - throw new Error("Hopper returned inconsistent pagination metadata"); -} diff --git a/scripts/lib/real-hopper-selection.mjs b/scripts/lib/real-hopper-selection.mjs new file mode 100644 index 0000000000..307a43030e --- /dev/null +++ b/scripts/lib/real-hopper-selection.mjs @@ -0,0 +1,33 @@ +import { HOPPER_PROVIDER_IDENTITY } from "../../dist/hopper/HopperProvider.js"; + +/** Verify the selected Hopper candidate and concrete provider binding. */ +export const requireHopperSelection = (status, expected) => { + const candidates = status.analysis_provider_candidates; + const hopper = Array.isArray(candidates) + ? candidates.find( + (candidate) => candidate?.provider?.id === HOPPER_PROVIDER_IDENTITY.id, + ) + : undefined; + if ( + hopper === undefined || + hopper.availability?.status !== "available" || + hopper.target_support?.status !== expected.targetSupport || + hopper.selected !== expected.selected + ) + throw new Error("binary_session omitted truthful Hopper candidate status"); + if (!expected.selected) { + if (status.analysis_provider_binding !== null) + throw new Error("Target-free status unexpectedly selected a provider"); + return null; + } + const binding = status.analysis_provider_binding; + if ( + binding?.provider?.id !== HOPPER_PROVIDER_IDENTITY.id || + typeof binding.provider.version !== "string" || + binding.selection_source !== "auto-single-candidate" || + binding.analysis_profile?.provider?.id !== HOPPER_PROVIDER_IDENTITY.id || + binding.analysis_profile.provider.version !== binding.provider.version + ) + throw new Error("binary_session omitted its concrete Hopper binding"); + return binding; +}; diff --git a/scripts/lib/real-hopper-semantic.mjs b/scripts/lib/real-hopper-semantic.mjs index 62428c97ff..8bd20c4404 100644 --- a/scripts/lib/real-hopper-semantic.mjs +++ b/scripts/lib/real-hopper-semantic.mjs @@ -152,7 +152,7 @@ export async function verifyRealHopperFixture({ }; } -/** Reject malformed, unsafe, or error-level diagnostics from the MCP runtime. */ +/** Reject malformed, unsafe, or unexpected failure diagnostics from MCP. */ export function requireSafeDiagnostics(chunks) { const lines = chunks .join("") @@ -171,7 +171,12 @@ export function requireSafeDiagnostics(chunks) { typeof diagnostic !== "object" || diagnostic.application !== "rea" || typeof diagnostic.level !== "number" || - diagnostic.level >= 40 + diagnostic.level >= 50 || + (diagnostic.level >= 40 && + diagnostic.errorTag !== "HopperRemoteError" && + !( + diagnostic.tool === "procedure_info" && diagnostic.status === "error" + )) ) throw new Error(`The MCP runtime emitted unsafe stderr: ${line}`); } @@ -204,7 +209,7 @@ export async function resolveFixtureProcedure( expectedName, normalizedResult, ) { - const page = normalizedResult( + const matches = normalizedResult( await client.callTool( { name: "search_procedures", @@ -212,30 +217,28 @@ export async function resolveFixtureProcedure( pattern: expectedName, mode: "literal", case_sensitive: true, - limit: 100, }, }, options, ), `search_procedures ${expectedName}`, ); - const matches = Array.isArray(page?.items) - ? page.items.filter( + const exactMatches = Array.isArray(matches) + ? matches.filter( (item) => typeof item?.value === "string" && - item.value_truncated === false && item.value.replace(/^_+/u, "") === expectedName, ) : []; if ( - matches.length !== 1 || - typeof matches[0]?.address !== "string" || - !/^0x[0-9a-f]+$/iu.test(matches[0].address) + exactMatches.length !== 1 || + typeof exactMatches[0]?.address !== "string" || + !/^0x[0-9a-f]+$/iu.test(exactMatches[0].address) ) throw new Error( `Expected exactly one Hopper procedure named ${expectedName}`, ); - return { address: matches[0].address, name: matches[0].value }; + return { address: exactMatches[0].address, name: exactMatches[0].value }; } /** Request the assembly evidence required by the fixture oracle. */ @@ -249,7 +252,7 @@ export const analyzeFixtureProcedure = async ( await client.callTool( { name: "analyze_function", - arguments: { procedure: procedure.address, include_assembly: true }, + arguments: { procedure: procedure.address }, }, options, ), diff --git a/scripts/lib/verify-package-core.mjs b/scripts/lib/verify-package-core.mjs index a4978eb3f2..f01a7994c6 100644 --- a/scripts/lib/verify-package-core.mjs +++ b/scripts/lib/verify-package-core.mjs @@ -32,7 +32,7 @@ export const json = (text) => JSON.parse(text); export const verifyCompleteToolCatalog = async (client, options) => { const listed = await client.listTools(undefined, options); const status = await client.callTool( - { name: "binary_session", arguments: { detail: "full" } }, + { name: "binary_session", arguments: {} }, options, ); const availability = status.structuredContent?.result?.tool_availability; @@ -61,13 +61,6 @@ export const pathExists = async (path) => { /** Synthetic function dossier for managed/native verification fixtures. */ export const functionDossier = (name) => { - const emptyPage = { - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }; return { procedure: { address: "0x401000", @@ -81,23 +74,16 @@ export const functionDossier = (name) => { signature: null, locals: [], }, - pseudocode: { - text: "", - total_chars: 0, - returned_chars: 0, - truncated: false, - next_offset: null, - }, - assembly: emptyPage, - comments: emptyPage, - callers: emptyPage, - callees: emptyPage, - incoming_references: emptyPage, - outgoing_references: emptyPage, - referenced_strings: emptyPage, - referenced_names: emptyPage, - basic_blocks: emptyPage, - instruction_scan: { scanned: 0, truncated: false }, + pseudocode: "", + assembly: [], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [], limitations: [], }; }; diff --git a/scripts/verify-agent-experience.mjs b/scripts/verify-agent-experience.mjs index 378d4031f0..6dcf489b0a 100644 --- a/scripts/verify-agent-experience.mjs +++ b/scripts/verify-agent-experience.mjs @@ -134,7 +134,7 @@ try { const results = []; for (const scenario of scenarios) { process.stderr.write(`Running Codex agent evaluation: ${scenario.id}\n`); - const execution = await runCodex(scenario.prompt, fixtureRoot); + const execution = await runCodex(scenario.prompt); const transcriptDirectory = process.env.REA_AGENT_EVAL_TRANSCRIPT_DIR; if (transcriptDirectory !== undefined) { const transcriptPath = resolve( @@ -332,9 +332,8 @@ async function createTargets(root, includeManaged) { }; } -async function runCodex(prompt, investigationRoot) { +async function runCodex(prompt) { const mcpEnvironment = [ - ["REA_INVESTIGATION_INPUT_ROOTS_JSON", JSON.stringify([investigationRoot])], ["REA_BROWSER_OBSERVE_ENABLED", "true"], [ "REA_BROWSER_CDP_ENDPOINTS_JSON", @@ -378,7 +377,6 @@ async function runCodex(prompt, investigationRoot) { cwd: evaluationRoot, env: { ...process.env, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([investigationRoot]), REA_BROWSER_OBSERVE_ENABLED: "true", REA_BROWSER_CDP_ENDPOINTS_JSON: JSON.stringify(["http://127.0.0.1:9222"]), REA_BROWSER_ALLOWED_ORIGINS_JSON: JSON.stringify([ diff --git a/scripts/verify-local-application-workflows.mjs b/scripts/verify-local-application-workflows.mjs index f45a1620b9..a0e246931d 100644 --- a/scripts/verify-local-application-workflows.mjs +++ b/scripts/verify-local-application-workflows.mjs @@ -9,11 +9,9 @@ import { compareJavaScriptExportShapesEvidence, traceApplicationFeatureEvidence, } from "../dist/application/JavaScriptApplicationWorkflowService.js"; -import { PermissionAuthority } from "../dist/application/PermissionAuthority.js"; import { applicationVersionComparisonResultSchema } from "../dist/domain/javascriptApplicationVersionComparisonSchemas.js"; import { applicationFeatureTraceResultSchema } from "../dist/domain/javascriptFeatureTraceSchemas.js"; import { javaScriptExportShapeComparisonResultSchema } from "../dist/domain/javascriptExportShapeComparisonSchemas.js"; -import { createPermissionPolicy } from "../dist/domain/permissionPolicy.js"; import { completeVerifierRun, createVerifierRun } from "./lib/verifier-run.mjs"; const verifierRun = createVerifierRun(); @@ -24,7 +22,6 @@ const options = parseArgs({ right: { type: "string" }, "seed-kind": { type: "string", default: "module" }, "seed-value": { type: "string" }, - "source-map-read-approved": { type: "boolean", default: false }, "left-module-path": { type: "string" }, "left-export-name": { type: "string" }, "right-module-path": { type: "string" }, @@ -44,10 +41,9 @@ const [leftPath, rightPath] = await Promise.all([ ]); if (leftPath === rightPath) throw new Error("--left and --right must resolve to distinct paths"); -const authority = permissionAuthority([leftPath, rightPath]); const [left, right] = await Promise.all([ - analyze(leftPath, authority), - analyze(rightPath, authority), + analyze(leftPath), + analyze(rightPath), ]); const comparison = compareApplicationVersionsEvidence({ left, right }); if (!comparison.ok) throw comparison.error; @@ -199,37 +195,10 @@ function selectorKey(selector) { return `${selector.modulePath}\0${selector.exportName}`; } -async function analyze(path, authority) { - const result = await analyzeJavaScriptApplication(authority, { +async function analyze(path) { + const result = await analyzeJavaScriptApplication({ input_path: path, - approved: true, - source_map_read_approved: options["source-map-read-approved"], }); if (!result.ok) throw result.error; return result.value; } - -function permissionAuthority(roots) { - const scope = { - capability: "investigation_input", - roots, - executables: [], - environment_names: [], - network: "none", - mount: false, - }; - return new PermissionAuthority( - createPermissionPolicy( - [scope], - [ - { - ...scope, - grant_id: "local-application-workflow-verifier", - lifetime: "session", - operation_identity: null, - expires_at: null, - }, - ], - ), - ); -} diff --git a/scripts/verify-local-javascript-runtime.mjs b/scripts/verify-local-javascript-runtime.mjs index 1b56044ad1..60b52778d3 100644 --- a/scripts/verify-local-javascript-runtime.mjs +++ b/scripts/verify-local-javascript-runtime.mjs @@ -4,9 +4,7 @@ import { readFile, realpath } from "node:fs/promises"; import { parseArgs } from "node:util"; import { analyzeJavaScriptApplication } from "../dist/application/JavaScriptApplicationService.js"; -import { PermissionAuthority } from "../dist/application/PermissionAuthority.js"; import { reconcileJavaScriptRuntimeEvidence } from "../dist/application/JavaScriptRuntimeReconciliationService.js"; -import { createPermissionPolicy } from "../dist/domain/permissionPolicy.js"; import { completeVerifierRun, createVerifierRun } from "./lib/verifier-run.mjs"; const verifierRun = createVerifierRun(); @@ -18,7 +16,6 @@ const options = parseArgs({ assets: { type: "string", multiple: true, default: [] }, "runtime-evidence": { type: "string", multiple: true, default: [] }, mapping: { type: "string", multiple: true, default: [] }, - "source-map-read-approved": { type: "boolean", default: false }, }, strict: true, allowPositionals: false, @@ -42,14 +39,11 @@ const canonicalLayers = await Promise.all( path: await realpath(layer.path), })), ); -const authority = permissionAuthority(canonicalLayers.map(({ path }) => path)); const staticLayers = []; for (const layer of canonicalLayers) { - const analyzed = await analyzeJavaScriptApplication(authority, { + const analyzed = await analyzeJavaScriptApplication({ input_path: layer.path, format: "auto", - approved: true, - source_map_read_approved: options["source-map-read-approved"], }); if (!analyzed.ok) throw analyzed.error; staticLayers.push({ @@ -104,31 +98,6 @@ process.stdout.write( })}\n`, ); -function permissionAuthority(roots) { - const scope = { - capability: "investigation_input", - roots, - executables: [], - environment_names: [], - network: "none", - mount: false, - }; - return new PermissionAuthority( - createPermissionPolicy( - [scope], - [ - { - ...scope, - grant_id: "local-javascript-runtime-verifier", - lifetime: "session", - operation_identity: null, - expires_at: null, - }, - ], - ), - ); -} - async function readEvidenceFile(path) { const bytes = await readFile(await realpath(path)); if (bytes.byteLength > 64 * 1024 * 1024) diff --git a/scripts/verify-managed-conformance.mjs b/scripts/verify-managed-conformance.mjs index 8c71bbf40e..be3e24a2fa 100644 --- a/scripts/verify-managed-conformance.mjs +++ b/scripts/verify-managed-conformance.mjs @@ -21,7 +21,6 @@ import { } from "./lib/managed-pe-fixture.mjs"; import { createManagedConformanceSupport } from "./lib/managed-conformance-support.mjs"; import { - applicationGraphLimits, comparisonLimits, defaultIlBody, functionDossier, @@ -45,7 +44,6 @@ const { workspace, inspectionLimits, memberLimits, - applicationGraphLimits, defaultIlBody, }); @@ -66,7 +64,7 @@ try { ".NETCoreApp,Version=v8.0", ]); assert.equal( - modernArtifact.resources.items[0]?.data_sha256, + modernArtifact.resources[0]?.data_sha256, sha256(Buffer.from("source-owned managed resource")), ); @@ -94,17 +92,14 @@ try { framework.target, nativeBoundaryLimits, ); - assert.equal(frameworkBoundaries.pinvoke_imports.total, 1); + assert.equal(frameworkBoundaries.pinvoke_imports.length, 1); assert.equal( - frameworkBoundaries.pinvoke_imports.items[0]?.verification, + frameworkBoundaries.pinvoke_imports[0]?.verification, "managed-declaration-only", ); + assert.equal(frameworkBoundaries.pinvoke_imports[0]?.char_set, "unicode"); assert.equal( - frameworkBoundaries.pinvoke_imports.items[0]?.char_set, - "unicode", - ); - assert.equal( - frameworkBoundaries.pinvoke_imports.items[0]?.call_convention, + frameworkBoundaries.pinvoke_imports[0]?.call_convention, "stdcall", ); const frameworkMembers = inspectManagedMembersBytes( @@ -173,10 +168,6 @@ try { const nativeVerification = verifyManagedNativeBoundariesEvidence({ managed_boundaries: frameworkBoundaryEvidence, native_observations: [nativeFunctionEvidence], - limits: { - max_native_observations: 20, - max_candidates_per_import: 25, - }, }); assert.equal(nativeVerification.ok, true); assert.equal(nativeVerification.value.normalized_result.summary.verified, 1); @@ -184,13 +175,6 @@ try { managed_artifact: frameworkArtifactEvidence, managed_members: frameworkMemberEvidence, managed_native_boundaries: frameworkBoundaryEvidence, - limits: { - max_types: 100, - max_methods: 100, - max_fields: 100, - max_pinvoke_imports: 100, - max_native_implementations: 100, - }, }); assert.equal(applicationGraph.ok, true); assert.equal( @@ -213,13 +197,6 @@ try { case_sensitive: true, }, direction: "incoming", - limits: { - max_seed_matches: 5, - max_depth: 4, - max_nodes: 50, - max_edges: 100, - max_paths: 10, - }, }); assert.equal(applicationTrace.ok, true); assert.equal( @@ -254,12 +231,9 @@ try { nativeBoundaryLimits, ); assert.equal(r2rBoundaries.summary.ready_to_run, true); + assert.equal(r2rBoundaries.native_implementations[0]?.code_type, "native"); assert.equal( - r2rBoundaries.native_implementations.items[0]?.code_type, - "native", - ); - assert.equal( - r2rBoundaries.native_implementations.items[0]?.boundary_kind, + r2rBoundaries.native_implementations[0]?.boundary_kind, "native-body", ); @@ -273,9 +247,9 @@ try { obfuscated.target, memberLimits, ); - assert.equal(obfuscatedMembers.types.items[0]?.full_name, "Fixture.ꙮType"); - assert.equal(obfuscatedMembers.methods.items[0]?.name, "λ⛧"); - assert.equal(obfuscatedMembers.fields.items[0]?.name, "字段"); + assert.equal(obfuscatedMembers.types[0]?.full_name, "Fixture.ꙮType"); + assert.equal(obfuscatedMembers.methods[0]?.name, "λ⛧"); + assert.equal(obfuscatedMembers.fields[0]?.name, "字段"); const runtimeExecutable = join(workspace, "dotnet"); await writeFile(runtimeExecutable, "#!/bin/sh\n"); const runtimeCeiling = { @@ -299,7 +273,7 @@ try { ], ); assert.equal(runtimeAuthority.ok, true); - const runtimeMethod = obfuscatedMembers.methods.items[0]; + const runtimeMethod = obfuscatedMembers.methods[0]; assert.ok(runtimeMethod); const obfuscatedMembersEvidence = createEvidence( undefined, diff --git a/scripts/verify-package-discovery.mjs b/scripts/verify-package-discovery.mjs index 91cf850734..91f7abb250 100644 --- a/scripts/verify-package-discovery.mjs +++ b/scripts/verify-package-discovery.mjs @@ -39,7 +39,7 @@ export async function verifyPackageDiscovery({ cli, environment }) { ); const doctorExecution = await runWithStatus( cli, - ["doctor", "--detail", "full", "--json"], + ["doctor", "--json"], environment, ); const summary = json(summaryExecution.stdout); diff --git a/scripts/verify-package-environment.mjs b/scripts/verify-package-environment.mjs index 574f32b349..22cf1bea9b 100644 --- a/scripts/verify-package-environment.mjs +++ b/scripts/verify-package-environment.mjs @@ -75,7 +75,6 @@ export async function verifyPackageEnvironment({ ...packageHopperEnvironment(root), REA_NPX_LOG: npxLog, REA_EVIDENCE_ROOTS_JSON: JSON.stringify([evidenceRoot]), - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([workspace]), REA_REFERENCE_ROOTS_JSON: JSON.stringify([referenceRoot]), REA_REFERENCE_SECRET_PATTERNS_JSON: JSON.stringify([".env"]), }; diff --git a/scripts/verify-package-managed.mjs b/scripts/verify-package-managed.mjs index 2a117606f8..6d042aaff6 100644 --- a/scripts/verify-package-managed.mjs +++ b/scripts/verify-package-managed.mjs @@ -327,7 +327,7 @@ export async function verifyManaged({ cli, workspace, environment }) { managedPath, environment, }); - const managedMethod = managedMembers.normalized_result.methods.items[0]; + const managedMethod = managedMembers.normalized_result.methods[0]; await verifyManagedReconstruction({ cli, managedMembers, diff --git a/scripts/verify-package-mcp.mjs b/scripts/verify-package-mcp.mjs index 35fdf43d6f..bc3cbb9094 100644 --- a/scripts/verify-package-mcp.mjs +++ b/scripts/verify-package-mcp.mjs @@ -41,7 +41,7 @@ const verifyMcpReplay = async (client, mcpOptions, investigationReplay) => { const verifyMcpTargetFree = async (client, mcpOptions) => { const status = await client.callTool( - { name: "binary_session", arguments: { detail: "full" } }, + { name: "binary_session", arguments: {} }, mcpOptions, ); const currentDocument = @@ -89,7 +89,7 @@ const verifyMcpOpenAndBind = async (client, mcpOptions) => { const providerStatusEnvelope = json( prompts.mcpText( await client.callTool( - { name: "binary_session", arguments: { detail: "full" } }, + { name: "binary_session", arguments: {} }, mcpOptions, ), ), @@ -204,7 +204,6 @@ export async function verifyPackageMcp({ args: ["mcp"], env: { ...environment, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([]), }, stderr: "pipe", }); diff --git a/scripts/verify-package-platform.mjs b/scripts/verify-package-platform.mjs index f21641f06c..b4db6bf167 100644 --- a/scripts/verify-package-platform.mjs +++ b/scripts/verify-package-platform.mjs @@ -21,23 +21,11 @@ export async function verifyPackagePlatform({ cli, environment }) { `packaged Hopper-backed analyze CLI failed: ${JSON.stringify(overview)}`, ); const inspected = json( - await run( - cli, - [ - "inspect", - process.execPath, - "--detail", - "detailed", - "--limit", - "1", - "--json", - ], - environment, - ), + await run(cli, ["inspect", process.execPath, "--json"], environment), ); if ( inspected.operation !== "binary_overview" || - inspected.normalized_result?.detail !== "detailed" + inspected.normalized_result?.procedure_count < 1 ) throw new Error("packaged inspect CLI failed"); const functionResult = json( diff --git a/scripts/verify-package.mjs b/scripts/verify-package.mjs index bb2048c4c6..7da72b00ed 100644 --- a/scripts/verify-package.mjs +++ b/scripts/verify-package.mjs @@ -54,7 +54,6 @@ try { args: ["mcp"], environment: { ...environmentData.environment, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([]), }, policy: MCP_STARTUP_POLICY, }); @@ -63,7 +62,6 @@ try { args: ["mcp"], environment: { ...environmentData.environment, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([]), }, policy: MCP_STARTUP_POLICY, packageName: PRODUCT_IDENTITY.packageName, diff --git a/scripts/verify-packed-bridge.mjs b/scripts/verify-packed-bridge.mjs index 020202ea43..cd1ca79790 100644 --- a/scripts/verify-packed-bridge.mjs +++ b/scripts/verify-packed-bridge.mjs @@ -35,7 +35,7 @@ export async function verifyPackedBridge({ const probe = JSON.parse( ( await exec("python3", [ - join(root, "tests/fixtures/bridgeRegexProbe.py"), + join(root, "tests/fixtures/bridgeSearchProbe.py"), join(workspace, packedHopperBridge), JSON.stringify({ action: "match", diff --git a/scripts/verify-real-browser.mjs b/scripts/verify-real-browser.mjs index 8045e28634..4ed5ca3c28 100644 --- a/scripts/verify-real-browser.mjs +++ b/scripts/verify-real-browser.mjs @@ -408,8 +408,8 @@ async function pageTarget(provider, endpoint, origin) { approved: true, }), ); - if (listed.ok && listed.value.targets.items[0] !== undefined) - return listed.value.targets.items[0].target_id; + if (listed.ok && listed.value.targets[0] !== undefined) + return listed.value.targets[0].target_id; await delay(25); } throw new Error("Real Chrome did not expose the local test page target"); diff --git a/scripts/verify-real-ghidra-assertions.mjs b/scripts/verify-real-ghidra-assertions.mjs index 5bd5487ac7..d6466231d3 100644 --- a/scripts/verify-real-ghidra-assertions.mjs +++ b/scripts/verify-real-ghidra-assertions.mjs @@ -145,10 +145,8 @@ function assertDossierProcedure(dossier, address) { dossier.procedure.classification === null || dossier.procedure.classification.provenance !== "ghidra-function-manager" || dossier.procedure.classification.external || - dossier.pseudocode.text.trim().length === 0 || - dossier.pseudocode.returned_chars !== [...dossier.pseudocode.text].length || - dossier.instruction_scan.scanned < 1 || - dossier.instruction_scan.truncated || + typeof dossier.pseudocode !== "string" || + dossier.pseudocode.trim().length === 0 || !dossier.limitations.some((value) => /indirect|computed/u.test(value)) || !dossier.limitations.some((value) => /Ghidra|Hopper|provider/u.test(value)) ) @@ -159,10 +157,7 @@ function assertDossierProcedure(dossier, address) { function assertDossierReferences(dossier) { if ( - ![ - ...dossier.incoming_references.items, - ...dossier.outgoing_references.items, - ].every( + ![...dossier.incoming_references, ...dossier.outgoing_references].every( ({ kind }) => kind.available && kind.provenance === "ghidra-reference-manager", ) @@ -172,16 +167,14 @@ function assertDossierReferences(dossier) { function assertDossierCallees(dossier, expectedCallees) { for (const expected of expectedCallees) - if (!dossier.callees.items.some(({ address: value }) => value === expected)) + if (!dossier.callees.some(({ address: value }) => value === expected)) throw new Error(`Ghidra dossier missed callee ${expected}`); } function assertDossierStrings(dossier, expectedString) { if ( expectedString !== null && - !dossier.referenced_strings.items.some( - ({ value }) => value === expectedString, - ) + !dossier.referenced_strings.some(({ value }) => value === expectedString) ) throw new Error( `Ghidra dossier missed referenced string ${expectedString}`, @@ -189,20 +182,15 @@ function assertDossierStrings(dossier, expectedString) { } function assertDossierAssembly(dossier, requireAssembly) { - if ( - requireAssembly && - (dossier.assembly.items.length === 0 || dossier.assembly.truncated) - ) + if (requireAssembly && dossier.assembly.length === 0) throw new Error("Ghidra dossier assembly was unavailable or truncated"); } function assertDossierMultiBlock(dossier, requireMultiBlock) { if ( requireMultiBlock && - (dossier.basic_blocks.items.length < 2 || - !dossier.basic_blocks.items.some( - ({ successors }) => successors.length > 0, - )) + (dossier.basic_blocks.length < 2 || + !dossier.basic_blocks.some(({ successors }) => successors.length > 0)) ) throw new Error( "Ghidra dossier CFG missed the multi-block branch structure", @@ -212,12 +200,12 @@ function assertDossierMultiBlock(dossier, requireMultiBlock) { export function dossierSummary(dossier) { return { address: dossier.procedure.address, - pseudocode_chars: dossier.pseudocode.total_chars, - instructions: dossier.instruction_scan.scanned, - callees: dossier.callees.returned, - outgoing_references: dossier.outgoing_references.returned, - referenced_strings: dossier.referenced_strings.returned, - basic_blocks: dossier.basic_blocks.returned, + pseudocode_chars: [...dossier.pseudocode].length, + instructions: dossier.assembly.length, + callees: dossier.callees.length, + outgoing_references: dossier.outgoing_references.length, + referenced_strings: dossier.referenced_strings.length, + basic_blocks: dossier.basic_blocks.length, native_parameters: dossier.native_api.available === true ? dossier.native_api.parameters.length @@ -350,7 +338,6 @@ function assertStrings(strings) { const item = strings.find((candidate) => candidate.value === expected); if ( item === undefined || - item.value_truncated || typeof item.string.encoding !== "string" || item.string.byte_length < expected.length ) diff --git a/scripts/verify-real-ghidra-function.mjs b/scripts/verify-real-ghidra-function.mjs index d0f50a93ab..e2cdb6842f 100644 --- a/scripts/verify-real-ghidra-function.mjs +++ b/scripts/verify-real-ghidra-function.mjs @@ -118,10 +118,6 @@ export async function verifyDebugFunctionOperations( const switchDossier = await analyzeSwitchDossier(client, switchProcedure); const denseSwitchDossier = await functionCall(client, "analyze_function", { procedure: denseSwitchProcedure.address, - include_assembly: true, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDenseSwitchDossier(denseSwitchDossier, denseSwitchProcedure.address); assertIndirectDossier(indirectDossier, leaf.address); @@ -246,10 +242,6 @@ async function assertStringXrefs(client, entryStringAddress) { async function analyzeEntryDossier(client, entry, branch, indirect) { const entryDossier = await functionCall(client, "analyze_function", { procedure: entry.address, - include_assembly: true, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDossier(entryDossier, { address: entry.address, @@ -263,10 +255,6 @@ async function analyzeEntryDossier(client, entry, branch, indirect) { async function analyzeSwitchDossier(client, switchProcedure) { const dossier = await functionCall(client, "analyze_function", { procedure: switchProcedure.address, - include_assembly: true, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDossier(dossier, { address: switchProcedure.address, @@ -280,9 +268,6 @@ async function analyzeSwitchDossier(client, switchProcedure) { async function analyzeBranchDossier(client, branch) { const branchDossier = await functionCall(client, "analyze_function", { procedure: branch.address, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDossier(branchDossier, { address: branch.address, @@ -294,10 +279,6 @@ async function analyzeBranchDossier(client, branch) { async function analyzeIndirectDossier(client, indirect) { const indirectDossier = await functionCall(client, "analyze_function", { procedure: indirect.address, - include_assembly: true, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDossier(indirectDossier, { address: indirect.address, @@ -307,13 +288,11 @@ async function analyzeIndirectDossier(client, indirect) { } function assertIndirectDossier(indirectDossier, leafAddress) { - if ( - indirectDossier.callees.items.some(({ address }) => address === leafAddress) - ) + if (indirectDossier.callees.some(({ address }) => address === leafAddress)) throw new Error( "Ghidra dossier falsely resolved a targetless callback as the fixture leaf", ); - if (!/\bcall\b/iu.test(indirectDossier.assembly.items.join("\n"))) + if (!/\bcall\b/iu.test(indirectDossier.assembly.join("\n"))) throw new Error("Ghidra indirect-call fixture lost its computed call site"); } @@ -384,10 +363,6 @@ export async function verifyStrippedFunctionOperations(client, entryString) { throw new Error("Ghidra did not decompile the stripped function"); const dossier = await functionCall(client, "analyze_function", { procedure: procedure.address, - include_assembly: true, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDossier(dossier, { address: procedure.address, @@ -449,9 +424,6 @@ export async function verifyCrossFormatOperations({ const messageOwner = await findCrossStringOwner(client, messageXrefs); const stringDossier = await functionCall(client, "analyze_function", { procedure: messageOwner.procedure.address, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDossier(stringDossier, { address: messageOwner.procedure.address, @@ -461,9 +433,6 @@ export async function verifyCrossFormatOperations({ const branchAddress = await findCrossBranchAddress(client, variant, callees); const branchDossier = await functionCall(client, "analyze_function", { procedure: branchAddress, - limit: 500, - max_pseudocode_chars: 100_000, - max_instructions: 5_000, }); assertDossier(branchDossier, { address: branchAddress, diff --git a/scripts/verify-real-ghidra-windows.mjs b/scripts/verify-real-ghidra-windows.mjs index 19bc6be8f7..80e79f7961 100644 --- a/scripts/verify-real-ghidra-windows.mjs +++ b/scripts/verify-real-ghidra-windows.mjs @@ -153,7 +153,6 @@ try { await functionOperation("xrefs", { address: procedure.address }); await functionOperation("analyze_function", { procedure: procedure.value, - include_assembly: true, }); const expected = [ diff --git a/scripts/verify-real-hopper.mjs b/scripts/verify-real-hopper.mjs index be9bc52b40..97262c1571 100644 --- a/scripts/verify-real-hopper.mjs +++ b/scripts/verify-real-hopper.mjs @@ -29,8 +29,9 @@ import { requireWorkflowEvidenceProvider, } from "./lib/mcp-verifier-results.mjs"; import { verifyHopperFunctionBasics } from "./lib/real-hopper-function-basics.mjs"; -import { openAndVerifyLargeFixture } from "./lib/real-hopper-pagination.mjs"; +import { openAndVerifyLargeFixture } from "./lib/real-hopper-exhaustive-search.mjs"; import { completeVerifierRun, createVerifierRun } from "./lib/verifier-run.mjs"; +import { requireHopperSelection } from "./lib/real-hopper-selection.mjs"; import { startUnrelatedHopperSentinel } from "./lib/unrelated-hopper-sentinel.mjs"; const execFileAsync = promisify(execFile); const verifierRun = createVerifierRun(); @@ -51,39 +52,6 @@ const sessionsBefore = new Set( const textValue = mcpTextValue; const requireSuccessfulTool = requireMcpResult; -const requireHopperSelection = (status, expected) => { - const candidates = status.analysis_provider_candidates; - const hopper = Array.isArray(candidates) - ? candidates.find( - (candidate) => candidate?.provider?.id === HOPPER_PROVIDER_IDENTITY.id, - ) - : undefined; - if ( - hopper === undefined || - hopper.availability?.status !== "available" || - hopper.target_support?.status !== expected.targetSupport || - hopper.selected !== expected.selected - ) { - throw new Error("binary_session omitted truthful Hopper candidate status"); - } - if (!expected.selected) { - if (status.analysis_provider_binding !== null) - throw new Error("Target-free status unexpectedly selected a provider"); - return null; - } - const binding = status.analysis_provider_binding; - if ( - binding?.provider?.id !== HOPPER_PROVIDER_IDENTITY.id || - typeof binding.provider.version !== "string" || - binding.selection_source !== "auto-single-candidate" || - binding.analysis_profile?.provider?.id !== HOPPER_PROVIDER_IDENTITY.id || - binding.analysis_profile.provider.version !== binding.provider.version - ) { - throw new Error("binary_session omitted its concrete Hopper binding"); - } - return binding; -}; - const requireOverview = (value, operation) => { if ( value === null || @@ -230,7 +198,7 @@ const verifyCurrentTarget = async (client, options) => { procedure: dossier.procedure, procedureCount: procedures.total, boundedPseudocodeChars: boundedPseudocode.length, - analyzedPseudocodeChars: [...dossier.pseudocode.text].length, + analyzedPseudocodeChars: [...dossier.pseudocode].length, callerCount: relationships.procedure_callers.length, calleeCount: relationships.procedure_callees.length, xrefCount: relationships.xrefs.length, @@ -287,24 +255,20 @@ try { onprogress: (update) => progressUpdates.push(update), }; const fullSessionStatus = () => - client.callTool( - { name: "binary_session", arguments: { detail: "full" } }, - options, - ); + client.callTool({ name: "binary_session", arguments: {} }, options); const initialSession = await fullSessionStatus(); const initialStatus = requireMcpResult(initialSession, "binary_session"); const listed = await client.listTools(); const availableTools = initialStatus.tool_availability; if (!Array.isArray(availableTools)) throw new Error("The real session omitted tool availability"); - const expectedNames = availableTools - .filter(({ available }) => available === true) - .map(({ name }) => name) - .sort(); + const expectedNames = availableTools.map(({ name }) => name).sort(); const actualNames = listed.tools.map(({ name }) => name).sort(); if (JSON.stringify(actualNames) !== JSON.stringify(expectedNames)) { + const expected = new Set(expectedNames); + const actual = new Set(actualNames); throw new Error( - "The real server tool inventory diverged from session availability", + `The real server tool catalog diverged from session capability inventory (untracked tools: ${actualNames.filter((name) => !expected.has(name)).join(", ") || "none"}; missing catalog tools: ${expectedNames.filter((name) => !actual.has(name)).join(", ") || "none"})`, ); } @@ -345,18 +309,15 @@ try { { name: "binary_overview", arguments: {} }, options, ); - await Promise.all([ - requireEvidenceProvider( - client, - documents, - "list_documents", - HOPPER_PROVIDER_IDENTITY.id, - ), - requireWorkflowEvidenceProvider(client, overview, "binary_overview", { - workflowProviderId: REA_WORKFLOW_PROVIDER.id, - upstreamProviderId: HOPPER_PROVIDER_IDENTITY.id, - }), - ]); + requireEvidenceProvider( + documents, + "list_documents", + HOPPER_PROVIDER_IDENTITY.id, + ); + requireWorkflowEvidenceProvider(overview, "binary_overview", { + workflowProviderId: REA_WORKFLOW_PROVIDER.id, + upstreamProviderId: HOPPER_PROVIDER_IDENTITY.id, + }); const segments = await client.callTool( { name: "list_segments", arguments: {} }, options, @@ -413,7 +374,33 @@ try { "binary_overview after target switch", ); const secondAnalysis = await verifyCurrentTarget(client, options); - const largePagination = await openAndVerifyLargeFixture({ + const documentsAfterTargetSwitch = requireMcpResult( + await client.callTool({ name: "list_documents", arguments: {} }, options), + "list_documents after target switch", + ); + if ( + !Array.isArray(documentsAfterTargetSwitch) || + documentsAfterTargetSwitch.length !== firstDocuments.length + 1 + ) + throw new Error("A distinct target did not receive one Hopper document"); + const reopenedTarget = await client.callTool( + { name: "open_binary", arguments: { path: targetB } }, + options, + ); + if (reopenedTarget.isError === true) + throw new Error(textValue(reopenedTarget)); + const documentsAfterReopen = requireMcpResult( + await client.callTool({ name: "list_documents", arguments: {} }, options), + "list_documents after reopening target B", + ); + if ( + !Array.isArray(documentsAfterReopen) || + documentsAfterReopen.length !== documentsAfterTargetSwitch.length + ) + throw new Error( + "Reopening the same target created a duplicate Hopper document", + ); + const largeInventory = await openAndVerifyLargeFixture({ client, options, normalizedResult: requireSuccessfulTool, @@ -454,7 +441,7 @@ try { segmentCount: firstOverview.segment_count, analyses: [firstAnalysis, secondAnalysis], fixtureAnalysis, - largePagination, + largeInventory, fixtureManifest: fixtureTargets.manifestPath, bundledMcpRunning, stderrBytes, @@ -466,6 +453,8 @@ try { targetHashes: [targetHashA, targetHashB, fixtureTargets.large.sha256], switched: true, secondOverview: verifiedSecondOverview, + documentCountAfterTargetSwitch: documentsAfterTargetSwitch.length, + documentCountAfterSameTargetReopen: documentsAfterReopen.length, }; } finally { const keepAlive = setInterval(() => undefined, 100); diff --git a/scripts/verify-reconstruction-readiness.mjs b/scripts/verify-reconstruction-readiness.mjs index ed8caa4fa9..41a30df9ec 100644 --- a/scripts/verify-reconstruction-readiness.mjs +++ b/scripts/verify-reconstruction-readiness.mjs @@ -23,7 +23,6 @@ const javascriptPath = join(fixtureRoot, "javascript-cli"); const electronPath = join(fixtureRoot, "electron"); const environment = { ...process.env, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([fixtureRoot]), }; const temporaryRoot = await mkdtemp(join(tmpdir(), "rea-readiness-")); @@ -32,13 +31,11 @@ const nativeEvidence = await runCli(["inspect-artifact", nativePath, "--json"]); const javascriptCliEvidence = await runCli([ "analyze-javascript-application", javascriptPath, - "--approved", "--json", ]); const electronCliEvidence = await runCli([ "analyze-javascript-application", electronPath, - "--approved", "--json", ]); @@ -62,11 +59,6 @@ try { catalog.tools, "evaluate_reconstruction_readiness", ); - const analysisTool = requireTool( - catalog.tools, - "analyze_javascript_application", - ); - assertExactAstLimit(analysisTool); assert.equal( readinessTool.annotations?.readOnlyHint, false, @@ -141,14 +133,7 @@ try { const projectedReport = requireObject(projection.result); assert.equal(projectedReport.report_digest, cliReport.report_digest); assert.equal(projectedReport.status, "pass"); - const reportUri = projectedReport.report_resource_uri; - assert.equal(typeof reportUri, "string"); - const resource = await client.readResource({ uri: reportUri }); - const resourceContent = resource.contents[0]; - if (resourceContent === undefined || !("text" in resourceContent)) - throw new TypeError("Readiness report resource is missing JSON text"); - const retained = JSON.parse(resourceContent.text); - assert.equal(retained.report.report_digest, cliReport.report_digest); + assert.equal(projectedReport.report_digest, cliReport.report_digest); const tampered = structuredClone(input); tampered.replay.expected_source_digest = cliReport.source_digest; @@ -203,20 +188,13 @@ async function runCli(arguments_) { } async function analyzeMcp(client_, inputPath) { - const result = await client_.callTool({ + const response = await client_.callTool({ name: "analyze_javascript_application", - arguments: { input_path: inputPath, approved: true }, + arguments: { input_path: inputPath }, }); - assert.notEqual(result.isError, true); - const projected = requireObject(result.structuredContent); - assert.equal(typeof projected.evidence_id, "string"); - const evidence = await client_.readResource({ - uri: `rea://evidence/${projected.evidence_id}`, - }); - const content = evidence.contents[0]; - if (content === undefined || !("text" in content)) - throw new TypeError("Analysis Evidence resource is missing JSON text"); - return parseEvidence(JSON.parse(content.text)); + assert.notEqual(response.isError, true); + const projected = requireObject(response.structuredContent); + return { evidence_id: projected.evidence_id }; } function requireTool(tools, name) { @@ -225,15 +203,6 @@ function requireTool(tools, name) { return tool; } -function assertExactAstLimit(tool) { - const properties = requireObject(tool.inputSchema.properties); - const limits = requireObject(properties.limits); - const limitProperties = requireObject(limits.properties); - const astLimit = requireObject(limitProperties.max_ast_nodes); - assert.equal(astLimit.default, 2_000_000, "effective AST limit is hidden"); - assert.equal(astLimit.maximum, 20_000_000, "schema AST limit is hidden"); -} - function requireObject(value) { if (typeof value !== "object" || value === null || Array.isArray(value)) throw new TypeError("Expected an object"); diff --git a/skills/reverse-engineer-anything/SKILL.md b/skills/reverse-engineer-anything/SKILL.md index 33a4809f20..855c05ea7f 100644 --- a/skills/reverse-engineer-anything/SKILL.md +++ b/skills/reverse-engineer-anything/SKILL.md @@ -3,8 +3,8 @@ name: reverse-engineer-anything description: Reverse engineer native, managed, Electron/JavaScript, packaged, and browser applications with REA. Use shipped-artifact or approved 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: 116 - catalog_digest: "6624247db5bcf7b52ce53173bbc0ac11bd51e9217e9e3be4298b755bcc60ea50" + tool_count: 115 + catalog_digest: "94f7cd1ac629a6bbffa77ba3b3d3f2e208e15df821bc0b14db4f81692d6f8eaa" --- # REA @@ -43,10 +43,9 @@ is unavailable. ## Work summary-first -Start with the default summary projection. Do not repeat an identical tool call. -Do not fetch full Evidence or a full application graph unless a specific claim -requires detail absent from the summary. For JavaScript graphs, follow the -paged resource URIs returned by the summary and fetch only the relevant page. +Start with the default result and use its inline Evidence and graph context. +Do not repeat an identical tool call. Make a focused follow-up only when the +returned result leaves a specific question unanswered. Every conclusion must distinguish observations, inferences, and unknowns. Cite Evidence IDs, preserve limitations and incomplete coverage, and never imply diff --git a/src/application/AnalysisClientCleanup.ts b/src/application/AnalysisClientCleanup.ts index de5f06a496..d2aa7e8ef1 100644 --- a/src/application/AnalysisClientCleanup.ts +++ b/src/application/AnalysisClientCleanup.ts @@ -7,7 +7,9 @@ import type { AnalysisClient, ExecutionOptions } from "./AnalysisProvider.js"; export const closeAnalysisClient = async ( client: AnalysisClient, providerId: string, - options: Pick = {}, + options: Pick & { + readonly retainDocument?: boolean; + } = {}, ): Promise> => { try { if (client.closeWithOutcome !== undefined) diff --git a/src/application/AnalysisProvider.ts b/src/application/AnalysisProvider.ts index 6ef2b12651..49dca4cad1 100644 --- a/src/application/AnalysisProvider.ts +++ b/src/application/AnalysisProvider.ts @@ -102,7 +102,9 @@ export interface AnalysisClient extends AnalysisOperationPort { requestActivitySnapshots?(): readonly ProviderRequestActivitySnapshot[]; /** Close with a typed result when the provider can verify cleanup. */ closeWithOutcome?( - options?: Pick, + options?: Pick & { + readonly retainDocument?: boolean; + }, ): Promise>; close(): Promise; } @@ -166,8 +168,6 @@ interface CapabilityLimits { export type CapabilityDescriptor = CapabilityAvailability & { readonly provider: ProviderIdentity; readonly operation: Exclude; - readonly inputContractVersion: number; - readonly outputContractVersion: number; readonly pagination: "none" | "offset" | "cursor"; readonly exhaustive: boolean; readonly effects: CapabilityEffects; diff --git a/src/application/AnalysisProviderRegistry.test.ts b/src/application/AnalysisProviderRegistry.test.ts index ee06e2e2ed..cde5d7c15b 100644 --- a/src/application/AnalysisProviderRegistry.test.ts +++ b/src/application/AnalysisProviderRegistry.test.ts @@ -365,7 +365,6 @@ const candidate = ( ? null : createAnalysisProfile( { id, name: identity.name, version: "1" }, - 1, { fixture: id }, ), compatibility: {}, @@ -395,8 +394,6 @@ const candidate = ( const capability = (provider: ProviderIdentity): CapabilityDescriptor => ({ provider, operation: "address_name", - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", diff --git a/src/application/AnalysisSnapshotCache.test.ts b/src/application/AnalysisSnapshotCache.test.ts index 4001a9d5ef..2819b3fdf2 100644 --- a/src/application/AnalysisSnapshotCache.test.ts +++ b/src/application/AnalysisSnapshotCache.test.ts @@ -54,11 +54,9 @@ describe("analysis snapshot cache partitioning", () => { analysisProfile: ANALYSIS_SNAPSHOT_PROFILE, limitations: [expect.stringContaining("local REA analysis snapshot")], }); - const changedProfile = createAnalysisProfile( - ANALYSIS_SNAPSHOT_PROVIDER, - 1, - { loader: "configured-override" }, - ); + const changedProfile = createAnalysisProfile(ANALYSIS_SNAPSHOT_PROVIDER, { + loader: "configured-override", + }); expect( cache.lookup(ANALYSIS_SNAPSHOT_TARGET, changedProfile, "address_name", { address: "0x1000", @@ -67,7 +65,6 @@ describe("analysis snapshot cache partitioning", () => { ).toBeUndefined(); const changedProviderProfile = createAnalysisProfile( { id: "other", name: "Other", version: "1" }, - 1, { loader: "mach-o-arm64" }, ); expect( diff --git a/src/application/ApplicationWorkflowEvidenceResolver.ts b/src/application/ApplicationWorkflowEvidenceResolver.ts index 4e6bbb0307..9050fb003b 100644 --- a/src/application/ApplicationWorkflowEvidenceResolver.ts +++ b/src/application/ApplicationWorkflowEvidenceResolver.ts @@ -30,11 +30,7 @@ import { const APPLICATION_GRAPH_IDENTITIES = [ { operation: "analyze_javascript_application", - predicate: "rea.javascript-application-analysis/v1", - }, - { - operation: "analyze_javascript_application", - predicate: "rea.javascript-application-analysis/v2", + predicate: "rea.javascript-application-analysis", }, { operation: "reconcile_javascript_runtime", @@ -82,7 +78,6 @@ export const resolveTraceApplicationFeatureRequestValidated = ( native_observations: [...input.native_observations, ...native.value], seed: input.seed, direction: input.direction, - limits: input.limits, }; const parsed = traceApplicationFeatureInputSchema.safeParse(raw); return parsed.success diff --git a/src/application/ArtifactExtraction.ts b/src/application/ArtifactExtraction.ts index bd6e338451..dae3d67afd 100644 --- a/src/application/ArtifactExtraction.ts +++ b/src/application/ArtifactExtraction.ts @@ -188,7 +188,6 @@ const createExtractionResult = ( extracted: readonly ExtractedOccurrence[], ): ArtifactExtractionResult => { const extractionSemantic = { - schema_version: 1 as const, source_manifest_id: inventory.manifest.manifest_id, selected_occurrence_ids: selected .map(({ occurrence }) => occurrence.occurrence_id) diff --git a/src/application/ArtifactGraphConstruction.ts b/src/application/ArtifactGraphConstruction.ts index c96647d1f9..a3aa22fb7b 100644 --- a/src/application/ArtifactGraphConstruction.ts +++ b/src/application/ArtifactGraphConstruction.ts @@ -149,7 +149,7 @@ export const createArtifactNode = (input: { readonly contentState: ArtifactNode["content_state"]; readonly limitations?: readonly string[]; }): ArtifactNode => ({ - artifact_id: `art_${digestCanonical({ schema_version: 1, sha256: input.sha256 })}`, + artifact_id: `art_${digestCanonical({ sha256: input.sha256 })}`, kind: input.kind, format: input.format, sha256: input.sha256, diff --git a/src/application/ArtifactInventory.ts b/src/application/ArtifactInventory.ts index 9af88c7474..37d23a748f 100644 --- a/src/application/ArtifactInventory.ts +++ b/src/application/ArtifactInventory.ts @@ -41,6 +41,27 @@ export const inventoryArtifact = async ( return paginateArtifactInventory(snapshot, page); }; +/** Inventory one artifact and return every graph collection in one response. */ +export const inventoryArtifactFully = async ( + inputPath: string, + limits: ArtifactLimits, + options: { + readonly signal?: AbortSignal; + readonly nativeMount?: ArtifactNativeMountPolicy; + readonly integrity?: ArtifactIntegrityPolicy; + } = {}, +): Promise => { + const snapshot = await scanArtifactInventory(inputPath, limits, options); + return paginateArtifactInventory(snapshot, { + nodeOffset: 0, + nodeLimit: Math.max(1, snapshot.nodes.length), + occurrenceOffset: 0, + occurrenceLimit: Math.max(1, snapshot.occurrences.length), + edgeOffset: 0, + edgeLimit: Math.max(1, snapshot.edges.length), + }); +}; + /** Scan an artifact once and retain the complete immutable graph for projection. */ export const scanArtifactInventory = async ( inputPath: string, diff --git a/src/application/ArtifactInventory/scanCanonical.ts b/src/application/ArtifactInventory/scanCanonical.ts index bd05b3fab0..60f5604987 100644 --- a/src/application/ArtifactInventory/scanCanonical.ts +++ b/src/application/ArtifactInventory/scanCanonical.ts @@ -258,9 +258,7 @@ const buildManifest = ({ readonly orderedEdges: readonly { edge_id: string }[]; }): ArtifactInventoryResult["manifest"] => artifactInventoryResultSchema.shape.manifest.parse({ - schema_version: 1, manifest_id: `agm_${digestCanonical({ - schema_version: 1, root_artifact_id: rootNode.artifact_id, graph_sha256: graphSha256, })}`, diff --git a/src/application/AuthorizedArtifactInventory.ts b/src/application/AuthorizedArtifactInventory.ts index 00a0467b12..2bd7369ea2 100644 --- a/src/application/AuthorizedArtifactInventory.ts +++ b/src/application/AuthorizedArtifactInventory.ts @@ -1,35 +1,18 @@ import { realpath } from "node:fs/promises"; import type { ArtifactLimits } from "../artifacts/ArtifactReader.js"; -import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js"; -import { isPathWithinRoot } from "../domain/localPath.js"; import { scanCanonicalArtifactInventory, type ArtifactInventoryOptions, type ArtifactInventorySnapshot, } from "./ArtifactInventory.js"; -import { canonicalizeConfiguredRoots } from "./ConfiguredRoots.js"; /** Resolve, authorize, and scan one artifact without a second path resolution. */ export const scanAuthorizedArtifactInventory = async ( inputPath: string, - roots: readonly string[], limits: ArtifactLimits, options: ArtifactInventoryOptions = {}, ): Promise => { - if (roots.length === 0) - throw new ArtifactReaderFailure( - "path", - "Artifact input roots are disabled", - ); - const [path, approved] = await Promise.all([ - realpath(inputPath), - canonicalizeConfiguredRoots(roots), - ]); - if (!approved.some((root) => isPathWithinRoot(root, path))) - throw new ArtifactReaderFailure( - "path", - "Artifact path is outside approved input roots", - ); + const path = await realpath(inputPath); return scanCanonicalArtifactInventory(path, limits, options); }; diff --git a/src/application/BinarySession.ts b/src/application/BinarySession.ts index 77268b3ba1..ae0e6f3e8b 100644 --- a/src/application/BinarySession.ts +++ b/src/application/BinarySession.ts @@ -228,7 +228,9 @@ export class BinarySession /** Close the active target, if any. */ close( - options: Pick = {}, + options: Pick & { + readonly retainProviderDocuments?: boolean; + } = {}, ): Promise> { return this.#serialize(async () => { const previous = this.#active; @@ -240,7 +242,14 @@ export class BinarySession : await closeAnalysisClient( previous.client, previous.route.identity.id, - options, + { + ...(options.progress === undefined + ? {} + : { progress: options.progress }), + ...(options.retainProviderDocuments === true + ? { retainDocument: true } + : {}), + }, ); this.clearSessionRecords(); this.#clearRuntimeAvailability(); @@ -340,7 +349,6 @@ export class BinarySession "ProviderAdapterError", "HopperProcessError", "HopperStartError", - "HopperRemoteError", ].includes(result.error._tag) ) { const capabilities = this.#active?.route.capabilities; @@ -351,7 +359,7 @@ export class BinarySession changed = this.#markRuntimeUnavailable( descriptor.operation, - "Provider became unavailable during this session.", + `${result.error._tag}: ${result.error.message}`, ) || changed; if (changed) this.#emitAvailabilityChanged(); } diff --git a/src/application/BinarySessionPort.ts b/src/application/BinarySessionPort.ts index 7bde5d6a18..e1c7530a51 100644 --- a/src/application/BinarySessionPort.ts +++ b/src/application/BinarySessionPort.ts @@ -27,18 +27,6 @@ import type { ProviderIdentity, } from "./AnalysisProvider.js"; -/** Compact identity and summary for one retained immutable Evidence bundle. */ -export interface EvidenceBundleSnapshot { - readonly bundleDigest: string; - readonly bundleVersion: 2; - readonly bytes: number; - readonly records: number; - readonly unknowns: number; - readonly scope: "session"; - readonly survivesSession: false; - readonly uri: string; -} - /** Target lifecycle used by CLI and MCP without exposing a concrete provider. */ export interface BinarySessionPort extends AnalysisOperationPort { open( @@ -51,7 +39,9 @@ export interface BinarySessionPort extends AnalysisOperationPort { }, ): Promise>; close( - options?: Pick, + options?: Pick & { + readonly retainProviderDocuments?: boolean; + }, ): Promise>; status(): JsonValue; activeTarget(): BinaryTarget | undefined; @@ -61,9 +51,6 @@ export interface BinarySessionPort extends AnalysisOperationPort { hasEvidence(evidenceId: string): boolean; evidenceById(evidenceId: string): Evidence | undefined; exportEvidenceBundle(): EvidenceBundle; - snapshotEvidenceBundle(): Result; - releaseEvidenceBundle(bundleDigest: string): boolean; - retainedEvidenceBundle(digest: string): string | undefined; importEvidenceBundle( bundle: unknown, ): Result; diff --git a/src/application/BinarySessionRecords.ts b/src/application/BinarySessionRecords.ts index 958a96a714..ea91bc2563 100644 --- a/src/application/BinarySessionRecords.ts +++ b/src/application/BinarySessionRecords.ts @@ -3,10 +3,7 @@ import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import type { EvidenceBundle } from "../domain/evidenceBundle.js"; -import { - evidenceBundleForTarget, - serializeEvidenceBundle, -} from "../domain/evidenceBundle.js"; +import { evidenceBundleForTarget } from "../domain/evidenceBundle.js"; import { EvidenceIntegrityError, EvidenceLimitError, @@ -28,7 +25,6 @@ import type { UpdateUnknownInput, } from "../domain/residualUnknown.js"; import { err, ok, type Result } from "../domain/result.js"; -import type { EvidenceBundleSnapshot } from "./BinarySessionPort.js"; import type { AnalysisExecution, AnalysisOperation, @@ -48,15 +44,11 @@ export interface ActiveAnalysisBinding { /** Owns session evidence, snapshots, workspaces, and residual unknowns. */ export abstract class BinarySessionRecords { - static readonly MAX_RETAINED_BUNDLES = 16; - static readonly MAX_RETAINED_BUNDLE_BYTES = 64 * 1024 * 1024; readonly #evidence = new EvidenceLedger({ maxRecords: 10_000, maxBytes: 64 * 1024 * 1024, }); readonly #snapshot = new AnalysisSnapshotCache(); - readonly #retainedBundles = new Map(); - #retainedBundleBytes = 0; readonly #investigationWorkspaces = new Map(); readonly #coverageWorkspaces = new Map< string, @@ -94,61 +86,6 @@ export abstract class BinarySessionRecords { return this.#evidence.export(); } - snapshotEvidenceBundle(): Result { - const bundle = this.#evidence.export(); - const encoded = serializeEvidenceBundle(bundle); - const digest = createHash("sha256").update(encoded).digest("hex"); - const existing = this.#retainedBundles.get(digest); - if (existing === undefined) { - if ( - this.#retainedBundles.size >= BinarySessionRecords.MAX_RETAINED_BUNDLES - ) - return err( - new EvidenceLimitError( - "records", - BinarySessionRecords.MAX_RETAINED_BUNDLES, - ), - ); - const bytes = Buffer.byteLength(encoded); - if ( - this.#retainedBundleBytes + bytes > - BinarySessionRecords.MAX_RETAINED_BUNDLE_BYTES - ) - return err( - new EvidenceLimitError( - "bytes", - BinarySessionRecords.MAX_RETAINED_BUNDLE_BYTES, - ), - ); - this.#retainedBundles.set(digest, encoded); - this.#retainedBundleBytes += bytes; - } - return ok({ - bundleDigest: digest, - bundleVersion: 2, - bytes: Buffer.byteLength(existing ?? encoded), - records: bundle.records.length, - unknowns: bundle.unknowns.length, - scope: "session", - survivesSession: false, - uri: `rea://evidence-bundle/${digest}`, - }); - } - - retainedEvidenceBundle(digest: string): string | undefined { - return this.#retainedBundles.get(digest); - } - - /** Release one immutable bundle so bounded retention has an explicit recovery path. */ - releaseEvidenceBundle(bundleDigest: string): boolean { - const encoded = this.#retainedBundles.get(bundleDigest); - if (encoded === undefined) return false; - this.#retainedBundles.delete(bundleDigest); - this.#retainedBundleBytes -= Buffer.byteLength(encoded); - this.#emitSnapshotChanged(); - return true; - } - importEvidenceBundle( bundle: unknown, ): Result { @@ -263,8 +200,6 @@ export abstract class BinarySessionRecords { this.#evidence.clear(); this.#snapshot.clear(); this.#snapshotInvalidated = false; - this.#retainedBundles.clear(); - this.#retainedBundleBytes = 0; this.#emitSnapshotChanged(); } @@ -415,4 +350,3 @@ const sortedWorkspaces = < left.revision - right.revision, ) .map((workspace) => structuredClone(workspace)); -import { createHash } from "node:crypto"; diff --git a/src/application/BinarySessionStatus.ts b/src/application/BinarySessionStatus.ts index 62890791b9..f4924c0ee7 100644 --- a/src/application/BinarySessionStatus.ts +++ b/src/application/BinarySessionStatus.ts @@ -169,7 +169,6 @@ const processLineageStatus = ( : { status: observation.status, observed_at: observation.observedAt, - schema_version: observation.lineage.schemaVersion, launcher_pid: observation.lineage.launcherPid, launcher_parent_pid: observation.lineage.launcherParentPid, process_group_id: observation.lineage.processGroupId, @@ -194,8 +193,6 @@ const capabilityStatus = ( available: descriptor.available, reason: descriptor.reason, availability_code: descriptor.availabilityCode ?? null, - input_contract_version: descriptor.inputContractVersion, - output_contract_version: descriptor.outputContractVersion, pagination: descriptor.pagination, exhaustive: descriptor.exhaustive, effects: { diff --git a/src/application/BrowserEvidence.ts b/src/application/BrowserEvidence.ts index d3a959e36e..4334421046 100644 --- a/src/application/BrowserEvidence.ts +++ b/src/application/BrowserEvidence.ts @@ -63,7 +63,7 @@ type BrowserEvidenceOperation = | "capture_web_screenshot" | "compare_web_screenshots"; -/** Create Evidence v2 for a policy-scoped external browser observation. */ +/** Create Evidence for a policy-scoped external browser observation. */ export const createBrowserEvidence = ( operation: BrowserEvidenceOperation, input: BrowserEvidenceInput, @@ -125,8 +125,7 @@ const browserParameters = ( cdp_endpoint: input.cdp_endpoint, allowed_origins: input.allowed_origins, }; - if (!("target_id" in input)) - return { ...scope, offset: input.offset, limit: input.limit }; + if (!("target_id" in input)) return scope; if ("screenshot_approved" in input) return { ...scope, diff --git a/src/application/BrowserScenarioEvidence.ts b/src/application/BrowserScenarioEvidence.ts index 3a9eb1ea41..94a3d3ebb2 100644 --- a/src/application/BrowserScenarioEvidence.ts +++ b/src/application/BrowserScenarioEvidence.ts @@ -33,7 +33,7 @@ const browserScenarioParameters = ( limits: scenario.limits, }); -/** Create Evidence v2 without retaining resolved scenario secret values. */ +/** Create Evidence without retaining resolved scenario secret values. */ export const createBrowserScenarioEvidence = ( scenario: BrowserScenario, capture: BrowserScenarioCapture, diff --git a/src/application/CallPathTracing.ts b/src/application/CallPathTracing.ts index 58c42f060d..43fcf06951 100644 --- a/src/application/CallPathTracing.ts +++ b/src/application/CallPathTracing.ts @@ -15,9 +15,6 @@ export interface CallPathTraceInput { readonly start: string; readonly goal?: string | undefined; readonly direction: "forward" | "backward"; - readonly max_depth: number; - readonly max_nodes: number; - readonly max_operations: number; } interface TraceState { @@ -38,9 +35,7 @@ interface TraceState { readonly address: string; readonly error: ReturnType; }>; - readonly frontier: Set; readonly residual: Set; - operations: number; queueIndex: number; traversalPath: string[]; } @@ -59,7 +54,7 @@ interface DiscoveredEdge { readonly discoveryDepth: number; } -/** Trace one deterministic bounded direct caller/callee path. */ +/** Trace direct caller/callee relationships until the graph is exhausted or the goal is reached. */ export const traceCallPath = async ( call: AnalysisCall, input: CallPathTraceInput, @@ -74,17 +69,6 @@ export const traceCallPath = async ( if (address === undefined) break; const current = state.visited.get(address); if (current === undefined) continue; - if (current.depth >= input.max_depth) { - state.frontier.add(address); - state.residual.add("Call-path traversal reached the depth limit."); - continue; - } - if (state.operations >= input.max_operations) { - recordPendingFrontier(state, input); - state.residual.add("Call-path traversal reached the operation budget."); - break; - } - state.operations += 1; const found = await expandAddress(call, { input, state, @@ -102,9 +86,7 @@ const createTraceState = (input: CallPathTraceInput): TraceState => ({ queue: [input.start], edges: new Map(), failures: [], - frontier: new Set(), residual: new Set(), - operations: 0, queueIndex: 0, traversalPath: input.goal === input.start ? [input.start] : [], }); @@ -152,12 +134,6 @@ const expandAddress = async ( } continue; } - if (state.visited.size >= input.max_nodes) { - if (state.frontier.size < input.max_nodes) - state.frontier.add(relatedAddress); - state.residual.add("Call-path traversal reached the node limit."); - continue; - } state.visited.set(relatedAddress, { depth: current.depth + 1, path, @@ -182,10 +158,6 @@ const recordEdge = ( input.direction === "forward" ? edge.relatedAddress : edge.address; const edgeKey = `${sourceAddress}\u0000${targetAddress}`; if (state.edges.has(edgeKey)) return; - if (state.edges.size >= input.max_nodes) { - state.residual.add("Call-path traversal reached the edge limit."); - return; - } state.edges.set(edgeKey, { source_address: sourceAddress, target_address: targetAddress, @@ -193,14 +165,6 @@ const recordEdge = ( }); }; -const recordPendingFrontier = ( - state: TraceState, - input: CallPathTraceInput, -): void => { - for (const pending of state.queue.slice(state.queueIndex - 1)) - if (state.frontier.size < input.max_nodes) state.frontier.add(pending); -}; - const projectTrace = (input: CallPathTraceInput, state: TraceState) => ({ start: input.start, goal: input.goal ?? null, @@ -225,19 +189,13 @@ const projectTrace = (input: CallPathTraceInput, state: TraceState) => ({ ), traversal_path: state.traversalPath, failures: state.failures, - frontier: [...state.frontier].sort(compareAddress), - limits: { - max_depth: input.max_depth, - max_nodes: input.max_nodes, - max_operations: input.max_operations, + traversal: { nodes_visited: state.visited.size, - operations_used: state.operations, }, truncated: state.residual.size > 0, residual_unknowns: [...state.residual], limitations: [ "Direct provider call relationships may omit unresolved indirect calls.", - "A not_reached goal is only absent from this bounded traversal, not from the complete program.", ], }); diff --git a/src/application/CapabilityInventory.contract.test.ts b/src/application/CapabilityInventory.contract.test.ts index caf5731366..4a4d77037f 100644 --- a/src/application/CapabilityInventory.contract.test.ts +++ b/src/application/CapabilityInventory.contract.test.ts @@ -10,7 +10,6 @@ describe("capability inventory contract", () => { { processCaptureEnabled: false, evidenceFileRoots: 0, - investigationInputRoots: 0, }, ); const unavailable = inventory.find(({ available }) => !available); diff --git a/src/application/CapabilityInventory.test.ts b/src/application/CapabilityInventory.test.ts index 5b0708652f..f6a05194c6 100644 --- a/src/application/CapabilityInventory.test.ts +++ b/src/application/CapabilityInventory.test.ts @@ -5,7 +5,6 @@ import { buildCapabilityInventory } from "./CapabilityInventory.js"; const enabledPolicy: Parameters[1] = { processCaptureEnabled: true, evidenceFileRoots: 1, - investigationInputRoots: 1, browserObservationEnabled: true, browserScenarioEnabled: true, electronObservationEnabled: true, @@ -180,7 +179,6 @@ describe("capability inventory: caller guidance", () => { ...enabledPolicy, processCaptureEnabled: false, evidenceFileRoots: 0, - investigationInputRoots: 0, browserObservationEnabled: false, electronObservationEnabled: false, v8InspectorObservationEnabled: false, diff --git a/src/application/CapabilityInventory.ts b/src/application/CapabilityInventory.ts index 76183c6fc3..9dfb8988fd 100644 --- a/src/application/CapabilityInventory.ts +++ b/src/application/CapabilityInventory.ts @@ -29,7 +29,6 @@ type ProviderDescriptor = ProviderCapability; export type AvailabilityPolicy = { readonly processCaptureEnabled: boolean; readonly evidenceFileRoots: number; - readonly investigationInputRoots: number; readonly browserObservationEnabled?: boolean; readonly browserScenarioEnabled?: boolean; readonly electronObservationEnabled?: boolean; @@ -190,16 +189,9 @@ const availabilityFor = (context: AvailabilityContext): Availability => { const javascriptApplicationAvailability = ({ name, - policy, }: AvailabilityContext): Availability | null => { if (name === "analyze_javascript_application") - return policy.investigationInputRoots === 0 - ? { - reason: "policy_disabled", - remediation: - "Configure an exact REA_INVESTIGATION_INPUT_ROOTS_JSON root in the MCP registration, then restart the registered MCP server or client.", - } - : { reason: "available", remediation: null }; + return { reason: "available", remediation: null }; return name === "reconcile_javascript_runtime" ? { reason: "available", remediation: null } : null; diff --git a/src/application/CrossVersionInventory.ts b/src/application/CrossVersionInventory.ts index ed17e1fb12..9ec39fc1f1 100644 --- a/src/application/CrossVersionInventory.ts +++ b/src/application/CrossVersionInventory.ts @@ -42,7 +42,6 @@ export type VersionInventoryScanner = typeof scanAuthorizedArtifactInventory; export interface VersionInventoryScanOptions { readonly leftPath: string; readonly rightPath: string; - readonly inputRoots: readonly string[]; readonly limits: ArtifactLimits; readonly signal?: AbortSignal; readonly integrity: ArtifactIntegrityPolicy; @@ -54,11 +53,11 @@ export const scanVersionInventories = async ( scanner: VersionInventoryScanner = scanAuthorizedArtifactInventory, ): Promise => { const [left, right] = await Promise.all([ - scanner(options.leftPath, options.inputRoots, options.limits, { + scanner(options.leftPath, options.limits, { signal: options.signal, integrity: options.integrity, }), - scanner(options.rightPath, options.inputRoots, options.limits, { + scanner(options.rightPath, options.limits, { signal: options.signal, integrity: options.integrity, }), @@ -69,7 +68,6 @@ export const scanVersionInventories = async ( /** Authorize and scan both inputs once under the same bounded traversal policy. */ export const scanVersions = async ( input: CrossVersionInvestigationInput, - inputRoots: readonly string[], signal?: AbortSignal, integrityContinueEnabled = false, ): Promise> => { @@ -90,7 +88,6 @@ export const scanVersions = async ( await scanVersionInventories({ leftPath: input.left_path, rightPath: input.right_path, - inputRoots, limits, ...(signal === undefined ? {} : { signal }), integrity, diff --git a/src/application/CrossVersionInvestigation.ts b/src/application/CrossVersionInvestigation.ts index 6afe33b511..2dfddc972f 100644 --- a/src/application/CrossVersionInvestigation.ts +++ b/src/application/CrossVersionInvestigation.ts @@ -56,12 +56,10 @@ export interface CrossVersionInvestigationOutcome { /** Runtime authority and cancellation capabilities for one investigation. */ export interface CrossVersionInvestigationExecution { - readonly inputRoots: readonly string[]; readonly session?: BinarySessionPort; readonly signal?: AbortSignal; readonly progress?: ProgressReporter; readonly integrityContinueEnabled?: boolean; - readonly authorizeInputRead?: () => Promise>; readonly authorizeWorkspaceWrite?: () => Promise>; } @@ -106,10 +104,6 @@ export const runCrossVersionInvestigationValidated = async ( execution.session, ); } - if (execution.authorizeInputRead !== undefined) { - const authorized = await execution.authorizeInputRead(); - if (!authorized.ok) return authorized; - } await execution.progress?.report({ phase: "scan_versions", completed: 0, @@ -119,7 +113,6 @@ export const runCrossVersionInvestigationValidated = async ( const snapshots = await scanVersions( input, - execution.inputRoots, execution.signal, execution.integrityContinueEnabled, ); diff --git a/src/application/DirectAnalysisStatus.ts b/src/application/DirectAnalysisStatus.ts index bf7be23bbf..f3712d9f89 100644 --- a/src/application/DirectAnalysisStatus.ts +++ b/src/application/DirectAnalysisStatus.ts @@ -1,10 +1,7 @@ import { parseConfig } from "../config.js"; import { projectAnalysisError } from "../domain/errors.js"; import { jsonObjectSchema, type JsonValue } from "../domain/jsonValue.js"; -import { - createServerIdentity, - createServerIdentitySummary, -} from "../serverIdentity.js"; +import { createServerIdentity } from "../serverIdentity.js"; import { silentLogger, type Logger } from "../logger.js"; import { createBinarySession } from "./runtime.js"; @@ -26,82 +23,10 @@ const runSessionStatus = async ( } }; -/** List provider identities, selection, and availability without capability bodies. */ -export const runProviderStatus = async ( - logger: Logger = silentLogger, - detail: "summary" | "full" = "summary", -): Promise => { - const fullStatus = await runSessionStatus(logger); - if (detail === "full") return fullStatus; - const parsedStatus = jsonObjectSchema.safeParse(fullStatus); - if (!parsedStatus.success || parsedStatus.data.error !== undefined) - return fullStatus; - const status = parsedStatus.data; - return { - open: status.open ?? false, - provider: status.provider ?? null, - providers: status.providers ?? [], - analysis_provider_binding: status.analysis_provider_binding ?? null, - analysis_provider_candidates: projectJsonObjectArray( - status.analysis_provider_candidates, - ["provider", "availability", "target_support", "selected"], - ), - server_identity: createServerIdentitySummary({ - startedAt: new Date().toISOString(), - }), - }; -}; +/** List complete provider identities, capabilities, and availability. */ +export const runProviderStatus = (logger: Logger = silentLogger) => + runSessionStatus(logger); -/** List concise operation availability, with explicit full descriptor opt-in. */ -export const runCapabilityStatus = async ( - logger: Logger = silentLogger, - detail: "summary" | "full" = "summary", -): Promise => { - const fullStatus = await runSessionStatus(logger); - if (detail === "full") return fullStatus; - const parsedStatus = jsonObjectSchema.safeParse(fullStatus); - if (!parsedStatus.success || parsedStatus.data.error !== undefined) - return fullStatus; - const status = parsedStatus.data; - const capabilities = projectJsonObjectArray(status.capabilities, [ - "operation", - "available", - "reason", - ]); - const available = capabilities.filter( - (candidate) => - typeof candidate === "object" && - candidate !== null && - "available" in candidate && - candidate.available === true, - ).length; - return { - open: status.open ?? false, - summary: { - total: capabilities.length, - available, - unavailable: capabilities.length - available, - }, - capabilities, - analysis_provider_binding: status.analysis_provider_binding ?? null, - server_identity: createServerIdentitySummary({ - startedAt: new Date().toISOString(), - }), - }; -}; - -const projectJsonObjectArray = ( - value: JsonValue | undefined, - keys: readonly string[], -): JsonValue[] => - Array.isArray(value) - ? value.map((candidate) => { - const parsed = jsonObjectSchema.safeParse(candidate); - if (!parsed.success) return candidate; - return Object.fromEntries( - keys.flatMap((key) => - parsed.data[key] === undefined ? [] : [[key, parsed.data[key]]], - ), - ); - }) - : []; +/** List complete operation descriptors and availability. */ +export const runCapabilityStatus = (logger: Logger = silentLogger) => + runSessionStatus(logger); diff --git a/src/application/Doctor.ts b/src/application/Doctor.ts index d6d3970ffe..13927d3eff 100644 --- a/src/application/Doctor.ts +++ b/src/application/Doctor.ts @@ -228,7 +228,7 @@ const collectDoctorIdentity = async ( live_server: { state: "unknown", remediation: - "Compare rea://server/identity or binary_session from the active client; an on-disk registration cannot prove the running server version.", + "Call binary_session in the active client to inspect the running server identity.", }, installations: { paths: installationPaths, diff --git a/src/application/DoctorProjection.ts b/src/application/DoctorProjection.ts deleted file mode 100644 index 6ce6fe05a5..0000000000 --- a/src/application/DoctorProjection.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { DoctorCheck, DoctorReport } from "./Doctor.js"; - -/** Project doctor diagnostics for concise CLI output or explicit full detail. */ -export const projectDoctorReport = ( - report: DoctorReport, - detail: "summary" | "full", -): DoctorReport | ReturnType => - detail === "full" ? report : doctorSummary(report); - -const doctorSummary = (report: DoctorReport) => ({ - healthy: report.healthy, - environment_healthy: report.environment_healthy, - scope: report.scope, - ...(report.hopperPath === undefined - ? {} - : { hopper_path: report.hopperPath }), - providers: (report.providerInspections ?? []).map((provider) => ({ - id: provider.id, - configured: provider.configured, - available: provider.available, - provider_version: provider.providerVersion, - failed_checks: provider.checks.filter(({ ok }) => !ok).map(checkSummary), - })), - failed_scope_checks: report.scope_checks - .filter(({ ok }) => !ok) - .map(checkSummary), - informational_drift_count: report.informational_checks.filter(({ ok }) => !ok) - .length, - identity: - report.identity === undefined - ? null - : { - cli_package_version: report.identity.cli_package_version, - expected_skill_version: report.identity.expected_skill_version, - catalog: { - counts: report.identity.catalog.counts, - digests: report.identity.catalog.digests, - }, - installations: report.identity.installations, - skill: report.identity.skill, - registrations: report.identity.registrations, - }, -}); - -const checkSummary = ( - check: Pick & { - readonly remediation?: string | null; - }, -) => ({ - name: check.name, - classification: check.classification, - ...(check.detail === undefined ? {} : { detail: check.detail }), - ...(check.remediation === undefined || check.remediation === null - ? {} - : { remediation: check.remediation }), -}); diff --git a/src/application/ElectronActiveEvidence.ts b/src/application/ElectronActiveEvidence.ts index 1d9b3e9540..f92086c0ac 100644 --- a/src/application/ElectronActiveEvidence.ts +++ b/src/application/ElectronActiveEvidence.ts @@ -8,7 +8,7 @@ import type { import { jsonValueSchema } from "../domain/jsonValue.js"; import { digestJson } from "./JavaScriptReplayPlanning.js"; -/** Create Evidence v2 without retaining arbitrary runtime argument values. */ +/** Create Evidence without retaining arbitrary runtime argument values. */ export const createElectronActiveEvidence = ( input: ElectronActiveObservationInput, result: ElectronActiveObservationResult, @@ -34,7 +34,6 @@ const scenarioProjection = ( input: ElectronActiveObservationInput, ): EvidenceObservation["parameters"] => ({ approved: input.approved, - schema_version: input.schema_version, executable_path: input.executable_path, application_path: input.application_path, application_root: input.application_root, diff --git a/src/application/ElectronEvidence.ts b/src/application/ElectronEvidence.ts index 7bc33d6835..e724e9470a 100644 --- a/src/application/ElectronEvidence.ts +++ b/src/application/ElectronEvidence.ts @@ -14,7 +14,7 @@ import type { type ElectronOperation = "list_electron_targets" | "inspect_electron_page"; -/** Create Evidence v2 for one root-confined Electron observation. */ +/** Create Evidence for one Electron observation. */ export const createElectronEvidence = ( operation: ElectronOperation, input: ListElectronTargetsInput | InspectElectronPageInput, @@ -56,5 +56,5 @@ const parameters = ( source_capture_approved: input.source_capture_approved, limits: input.limits, } - : { offset: input.offset, limit: input.limit }), + : {}), }); diff --git a/src/application/EnhancedLiteralTracing.ts b/src/application/EnhancedLiteralTracing.ts index 026afc85ec..497d704ac7 100644 --- a/src/application/EnhancedLiteralTracing.ts +++ b/src/application/EnhancedLiteralTracing.ts @@ -1,6 +1,6 @@ +import { z } from "zod"; import type { AnalysisOperation } from "./AnalysisProvider.js"; import { AnalysisOutputError, type AnalysisError } from "../domain/errors.js"; -import { parseAddressedPage } from "../domain/hopperValues.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; import type { @@ -16,33 +16,29 @@ type AnalysisCall = ( ) => Promise>; type LiteralSearchSource = readonly [ - "list_strings" | "list_procedures", + "search_strings" | "search_procedures", "string" | "procedure", ]; interface ReferenceTraceRequest { readonly matches: readonly TraceMatch[]; - readonly limit: number; - readonly operationBudget: number; readonly signal?: AbortSignal; } const FEATURE_SEARCH_SOURCES: readonly LiteralSearchSource[] = [ - ["list_strings", "string"], - ["list_procedures", "procedure"], + ["search_strings", "string"], + ["search_procedures", "procedure"], ]; const STRING_SEARCH_SOURCES: readonly LiteralSearchSource[] = [ - ["list_strings", "string"], + ["search_strings", "string"], ]; export interface LiteralTraceInput { readonly query: string; readonly case_sensitive: boolean; - readonly limit: number; - readonly max_operations: number; } -/** Trace a bounded feature or string literal through provider xrefs. */ +/** Trace every matching feature or string literal through provider xrefs. */ export const traceLiteralFeature = async ( call: AnalysisCall, input: LiteralTraceInput, @@ -53,29 +49,18 @@ export const traceLiteralFeature = async ( scope === "feature" ? FEATURE_SEARCH_SOURCES : STRING_SEARCH_SOURCES; const searched = await literalMatches(call, input, sources, signal); if (!searched.ok) return searched; - const residual = new Set(); const traced = await traceReferences(call, { matches: searched.value.matches, - limit: input.limit, - operationBudget: input.max_operations - searched.value.operations, ...(signal === undefined ? {} : { signal }), }); if (!traced.ok) return traced; - for (const reason of traced.value.residual) residual.add(reason); - const operations = searched.value.operations + traced.value.operations; - if (operations >= input.max_operations) - residual.add("Investigation reached the operation budget."); - if (searched.value.matches.length >= input.limit) - residual.add("Literal matches reached the configured limit."); return ok({ query: input.query, search_mode: "literal", - operations_used: operations, - operation_budget: input.max_operations, matches: searched.value.matches, references: traced.value.references, - truncated: residual.size > 0, - residual_unknowns: [...residual], + truncated: false, + residual_unknowns: [], }); }; @@ -84,53 +69,70 @@ const literalMatches = async ( input: LiteralTraceInput, sources: readonly LiteralSearchSource[], signal?: AbortSignal, -): Promise< - Result<{ matches: TraceMatch[]; operations: number }, AnalysisError> -> => { - let operations = 0; +): Promise> => { const matches: TraceMatch[] = []; - const needle = input.case_sensitive ? input.query : input.query.toLowerCase(); - for (const [tool, type] of sources) { - let offset = 0; - while (operations < input.max_operations && matches.length < input.limit) { - operations += 1; - const result = await call(tool, { offset, limit: 500 }, signal); + const needles = [...new Set(input.query.trim().split(/\s+/u))]; + const matched = new Set(); + for (const needle of needles) { + for (const [tool, type] of sources) { + const result = await call( + tool, + { + pattern: needle, + mode: "literal", + case_sensitive: input.case_sensitive, + }, + signal, + ); if (!result.ok) return result; - const page = parseAddressedPage(result.value); - if (!page.ok) return page; - for (const item of page.value.items) { - const haystack = input.case_sensitive - ? item.name - : item.name.toLowerCase(); - if (haystack.includes(needle)) - matches.push({ type, address: item.address, value: item.name }); - if (matches.length >= input.limit) break; - } - if (!page.value.hasMore || page.value.nextOffset === null) break; - offset = page.value.nextOffset; + const items = z + .array(z.object({ address: z.string(), value: z.string() })) + .safeParse(result.value); + if (!items.success) + return err( + new AnalysisOutputError( + tool, + "provider returned an invalid search result", + ), + ); + addPageMatches({ + items: items.data.map(({ address, value: name }) => ({ + address, + name, + })), + type, + matches, + matched, + }); } } - return ok({ matches, operations }); + return ok({ matches }); +}; + +const addPageMatches = (input: { + readonly items: readonly { + readonly address: string; + readonly name: string; + }[]; + readonly type: TraceMatch["type"]; + readonly matches: TraceMatch[]; + readonly matched: Set; +}): void => { + const { items, type, matches, matched } = input; + for (const item of items) { + const key = `${type}\u0000${item.address}`; + if (matched.has(key)) continue; + matches.push({ type, address: item.address, value: item.name }); + matched.add(key); + } }; const traceReferences = async ( call: AnalysisCall, request: ReferenceTraceRequest, -): Promise< - Result< - { references: TraceReference[]; operations: number; residual: string[] }, - AnalysisError - > -> => { - let operations = 0; +): Promise> => { const references: TraceReference[] = []; - const residual = new Set(); for (const match of request.matches) { - if (operations >= request.operationBudget) { - residual.add("Reference traversal stopped at the operation budget."); - break; - } - operations += 1; const xrefs = await call( "xrefs", { address: match.address }, @@ -152,13 +154,6 @@ const traceReferences = async ( "provider returned a non-address value", ), ); - if (operations >= request.operationBudget) { - residual.add( - "Containing-procedure resolution stopped at the operation budget.", - ); - break; - } - operations += 1; const resolved = await call( "resolve_containing_procedure", { address: source }, @@ -170,16 +165,7 @@ const traceReferences = async ( source_address: source, containing_procedure: resolved.value, }); - if (references.length >= request.limit) { - residual.add("Reference results reached the configured limit."); - break; - } } - if (references.length >= request.limit) break; } - return ok({ - references, - operations, - residual: [...residual], - }); + return ok({ references }); }; diff --git a/src/application/EnhancedToolPagination.ts b/src/application/EnhancedToolPagination.ts deleted file mode 100644 index 417876090c..0000000000 --- a/src/application/EnhancedToolPagination.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { AnalysisOperation } from "./AnalysisProvider.js"; -import { AnalysisOutputError, type AnalysisError } from "../domain/errors.js"; -import { parseAddressedPage } from "../domain/hopperValues.js"; -import type { JsonValue } from "../domain/jsonValue.js"; -import { err, ok, type Result } from "../domain/result.js"; - -type PageCall = ( - name: AnalysisOperation, - arguments_: Readonly>, - signal?: AbortSignal, -) => Promise>; - -/** Read all addressed entries while enforcing advancing provider pagination. */ -export const readAllAddressed = async (input: { - readonly call: PageCall; - readonly tool: "list_names" | "list_procedures"; - readonly signal?: AbortSignal; -}) => { - const entries: Array<{ address: string; name: string }> = []; - let offset = 0; - while (true) { - const result = await input.call( - input.tool, - { offset, limit: 500 }, - input.signal, - ); - if (!result.ok) return result; - const page = parseAddressedPage(result.value); - if (!page.ok) return page; - entries.push(...page.value.items); - if (!page.value.hasMore || page.value.nextOffset === null) - return ok(entries); - if (page.value.nextOffset <= offset) - return err( - new AnalysisOutputError( - input.tool, - "provider returned a non-advancing pagination offset", - ), - ); - offset = page.value.nextOffset; - } -}; diff --git a/src/application/EnhancedTools.ts b/src/application/EnhancedTools.ts index 64a69415a2..31d38d3b1b 100644 --- a/src/application/EnhancedTools.ts +++ b/src/application/EnhancedTools.ts @@ -1,4 +1,4 @@ -import type { z } from "zod"; +import { z } from "zod"; import type { AnalysisOperation, @@ -35,7 +35,6 @@ import { type EnhancedResult, type ValidatedEnhancedCall, } from "./EnhancedToolTypes.js"; -import { readAllAddressed } from "./EnhancedToolPagination.js"; import { traceCallPath } from "./CallPathTracing.js"; import { traceLiteralFeature } from "./EnhancedLiteralTracing.js"; import { projectNativeApiInspection } from "./NativeApiInspection.js"; @@ -128,7 +127,7 @@ export class EnhancedTools { case "find_xrefs_to_name": return this.#findXrefs(call.input.name, signal); case "binary_overview": - return this.#binaryOverview(call.input, signal); + return this.#binaryOverview(signal); case "analyze_function": return this.#analyzeFunction(call.input, signal); case "inspect_native_api": @@ -208,9 +207,6 @@ export class EnhancedTools { ): EnhancedResult { const analysisInput = enhancedInputSchemas.analyze_function.parse({ procedure: input.procedure, - include_assembly: true, - max_pseudocode_chars: input.max_pseudocode_chars, - max_instructions: input.max_instructions, }); const result = await this.#call("analyze_function", analysisInput, signal); if (!result.ok) return result; @@ -281,7 +277,6 @@ export class EnhancedTools { input: { readonly address: string; readonly direction: "forward" | "backward"; - readonly depth: number; }, signal?: AbortSignal, ): EnhancedResult { @@ -297,9 +292,7 @@ export class EnhancedTools { while (queueIndex < queue.length) { const current = queue[queueIndex++]; - if (current === undefined || current.depth >= input.depth) { - continue; - } + if (current === undefined) continue; const level = String(current.depth); graph[level] ??= []; @@ -330,12 +323,10 @@ export class EnhancedTools { status: "ok", calls: [...related.value], }); - if (current.depth + 1 < input.depth) { - for (const address of related.value) { - if (!discovered.has(address)) { - discovered.add(address); - queue.push({ address, depth: current.depth + 1 }); - } + for (const address of related.value) { + if (!discovered.has(address)) { + discovered.add(address); + queue.push({ address, depth: current.depth + 1 }); } } } @@ -380,16 +371,13 @@ export class EnhancedTools { }); } - async #binaryOverview( - input: { detail: "concise" | "detailed"; limit: number }, - signal?: AbortSignal, - ): EnhancedResult { + async #binaryOverview(signal?: AbortSignal): EnhancedResult { const [segmentsResult, documentsResult, proceduresResult, stringsResult] = await Promise.all([ this.#call("list_segments", {}, signal), this.#call("list_documents", {}, signal), - this.#call("list_procedures", { offset: 0, limit: 1 }, signal), - this.#call("list_strings", { offset: 0, limit: 1 }, signal), + this.#call("list_procedures", {}, signal), + this.#call("list_strings", {}, signal), ]); if (!segmentsResult.ok) return segmentsResult; if (!documentsResult.ok) return documentsResult; @@ -407,14 +395,12 @@ export class EnhancedTools { return ok({ document: documents.value[0] ?? "unknown", - detail: input.detail, - segments: segments.value - .slice(0, input.limit) - .map(({ name, start, end }) => - input.detail === "detailed" - ? { name, start, end, length: addressDistance(start, end) } - : { name, start, end }, - ), + segments: segments.value.map(({ name, start, end }) => ({ + name, + start, + end, + length: addressDistance(start, end), + })), segment_count: segments.value.length, procedure_count: procedureCount.value, string_count: stringCount.value, @@ -425,12 +411,19 @@ export class EnhancedTools { tool: "list_names" | "list_procedures", signal?: AbortSignal, ) { - return readAllAddressed({ - call: (name, arguments_, operationSignal) => - this.#call(name, arguments_, operationSignal), - tool, - ...(signal === undefined ? {} : { signal }), - }); + const result = await this.#call(tool, {}, signal); + if (!result.ok) return result; + const parsed = z + .array(z.object({ address: z.string(), value: z.string() })) + .safeParse(result.value); + return parsed.success + ? ok(parsed.data.map(({ address, value: name }) => ({ address, name }))) + : err( + new AnalysisOutputError( + tool, + "provider returned an invalid inventory", + ), + ); } async #call( @@ -438,12 +431,16 @@ export class EnhancedTools { arguments_: Readonly>, signal?: AbortSignal, ): Promise> { - if (signal?.aborted === true) return err(new AnalysisCancelledError(name)); + if (isAborted(signal)) return err(new AnalysisCancelledError(name)); const execution = await this.analysis.execute( name, arguments_, signal === undefined ? {} : { signal }, ); + if (isAborted(signal)) return err(new AnalysisCancelledError(name)); return execution.ok ? ok(execution.value.result) : execution; } } + +const isAborted = (signal: AbortSignal | undefined): boolean => + signal?.aborted === true; diff --git a/src/application/EvidenceBundleCommands.ts b/src/application/EvidenceBundleCommands.ts index fdfcd85364..547abcb83e 100644 --- a/src/application/EvidenceBundleCommands.ts +++ b/src/application/EvidenceBundleCommands.ts @@ -49,7 +49,7 @@ export const exportEvidenceBundleCommand = async ( ); }; -/** Compare two validated canonical Evidence v2 bundles without session state. */ +/** Compare two validated canonical Evidence bundles without session state. */ export const compareEvidenceBundlesCommand = async (input: { readonly leftPath: string; readonly rightPath: string; diff --git a/src/application/EvidenceBundleFiles.ts b/src/application/EvidenceBundleFiles.ts index 7febb5fce7..e01f605a7b 100644 --- a/src/application/EvidenceBundleFiles.ts +++ b/src/application/EvidenceBundleFiles.ts @@ -6,10 +6,7 @@ import { } from "../domain/evidenceBundle.js"; import { EvidenceFileError, EvidenceIntegrityError } from "../domain/errors.js"; import { err, ok, type Result } from "../domain/result.js"; -import { - LEGACY_PROCESS_CAPTURE_MESSAGE, - parseProcessCapture, -} from "../domain/processCapture.js"; +import { parseProcessCapture } from "../domain/processCapture.js"; import { readBoundedJson, writeBoundedText } from "./BoundedJsonFiles.js"; type EvidenceReadFailure = EvidenceFileError | EvidenceIntegrityError; @@ -27,9 +24,7 @@ export const readEvidenceBundle = async ( try { const bundle = parseEvidenceBundle(loaded.value); for (const record of bundle.records) { - if (record.predicate_type === "rea.process-capture/v3") - throw new TypeError(LEGACY_PROCESS_CAPTURE_MESSAGE); - if (record.predicate_type === "rea.process-capture/v4") + if (record.predicate_type === "rea.process-capture") parseProcessCapture(record.normalized_result); } return ok(bundle); diff --git a/src/application/InventoryProjectionEvidence.ts b/src/application/InventoryProjectionEvidence.ts index d0b37b8e6a..50b5db9b6c 100644 --- a/src/application/InventoryProjectionEvidence.ts +++ b/src/application/InventoryProjectionEvidence.ts @@ -39,7 +39,7 @@ interface InventoryProjectionOptions< readonly protocolError: string; } -/** Parse one inventory projection and wrap its deterministic result in Evidence v2. */ +/** Parse one inventory projection and wrap its deterministic result in Evidence. */ export const projectInventoryEvidence = < Input extends InventoryProjectionInput, Output extends InventoryProjectionResult, diff --git a/src/application/InvestigationProviders.ts b/src/application/InvestigationProviders.ts index 638eb51705..533a248103 100644 --- a/src/application/InvestigationProviders.ts +++ b/src/application/InvestigationProviders.ts @@ -14,7 +14,7 @@ export const REA_WORKFLOW_PROVIDER = { export const workflowAnalysisProfile = ( upstream: AnalysisProfileCommitment, ): AnalysisProfileCommitment => - createAnalysisProfile(REA_WORKFLOW_PROVIDER, 1, { + createAnalysisProfile(REA_WORKFLOW_PROVIDER, { upstream_analysis_profile: upstream, }); diff --git a/src/application/JavaScriptApplicationEvidence.ts b/src/application/JavaScriptApplicationEvidence.ts index 14b73f989c..f7a5c84c05 100644 --- a/src/application/JavaScriptApplicationEvidence.ts +++ b/src/application/JavaScriptApplicationEvidence.ts @@ -10,7 +10,7 @@ import type { import { jsonValueSchema } from "../domain/jsonValue.js"; import { JAVASCRIPT_APPLICATION_PROVIDER } from "./InvestigationProviders.js"; -/** Create Evidence v2 for one deterministic local JavaScript application graph. */ +/** Create Evidence for one deterministic local JavaScript application graph. */ export const createJavaScriptApplicationEvidence = ( input: AnalyzeJavaScriptApplicationInput, result: JavaScriptApplicationAnalysisResult, @@ -23,7 +23,7 @@ export const createJavaScriptApplicationEvidence = ( }, JAVASCRIPT_APPLICATION_PROVIDER, { - predicateType: `rea.javascript-application-analysis/v${String(result.schema_version)}`, + predicateType: "rea.javascript-application-analysis", operation: "analyze_javascript_application", parameters: parameters(input), result: jsonValueSchema.parse(result), @@ -40,7 +40,5 @@ const parameters = ( input: AnalyzeJavaScriptApplicationInput, ): EvidenceObservation["parameters"] => ({ format: input.format, - approved: input.approved, - source_map_read_approved: input.source_map_read_approved, limits: input.limits, }); diff --git a/src/application/JavaScriptApplicationEvidenceGraph.ts b/src/application/JavaScriptApplicationEvidenceGraph.ts index eb2d7ac116..b6c775af06 100644 --- a/src/application/JavaScriptApplicationEvidenceGraph.ts +++ b/src/application/JavaScriptApplicationEvidenceGraph.ts @@ -33,10 +33,7 @@ export const parseApplicationGraphEvidence = ( const evidence = parseEvidence(input); if ( evidence.operation === "analyze_javascript_application" && - [ - "rea.javascript-application-analysis/v1", - "rea.javascript-application-analysis/v2", - ].includes(evidence.predicate_type) && + evidence.predicate_type === "rea.javascript-application-analysis" && providerMatches(evidence, JAVASCRIPT_APPLICATION_PROVIDER) ) return staticApplicationSource(evidence); @@ -70,12 +67,9 @@ const staticApplicationSource = ( const result = javascriptApplicationAnalysisResultSchema.parse( evidence.normalized_result, ); - if ( - evidence.predicate_type !== - `rea.javascript-application-analysis/v${String(result.schema_version)}` - ) + if (evidence.predicate_type !== "rea.javascript-application-analysis") throw new TypeError( - "JavaScript application Evidence predicate does not match its result schema version", + "JavaScript application Evidence predicate does not match its result shape", ); analyzeJavaScriptApplicationInputSchema.parse({ input_path: result.input_path, @@ -87,7 +81,7 @@ const staticApplicationSource = ( graph: result.graph, kind: "static-application", rootArtifactSha256: result.root_artifact_sha256, - semanticGraph: result.schema_version === 2 ? result.semantic_graph : null, + semanticGraph: result.semantic_graph, }; }; diff --git a/src/application/JavaScriptApplicationService.ts b/src/application/JavaScriptApplicationService.ts index aebe2f64af..f7150a284c 100644 --- a/src/application/JavaScriptApplicationService.ts +++ b/src/application/JavaScriptApplicationService.ts @@ -6,11 +6,9 @@ import { javascriptApplicationAnalysisResultSchema, } from "../domain/javascriptApplicationAnalysis.js"; import { - AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisProtocolError, ArtifactOperationError, - PermissionRequiredError, type AnalysisError, } from "../domain/errors.js"; import type { Evidence } from "../domain/evidence.js"; @@ -19,13 +17,11 @@ import { err, ok, type Result } from "../domain/result.js"; import type { ExecutionOptions } from "./AnalysisProvider.js"; import { createJavaScriptApplicationEvidence } from "./JavaScriptApplicationEvidence.js"; import { reconstructJavaScriptArtifact } from "./JavaScriptArtifactReconstruction.js"; -import type { PermissionAuthority } from "./PermissionAuthority.js"; const OPERATION = "analyze_javascript_application" as const; -/** Authorize and statically analyze one local JavaScript/Electron application. */ +/** Statically analyze one local JavaScript/Electron application. */ export const analyzeJavaScriptApplication = async ( - authority: PermissionAuthority | undefined, rawInput: unknown, options: ExecutionOptions = {}, ): Promise> => { @@ -38,65 +34,31 @@ export const analyzeJavaScriptApplication = async ( projectInputIssues(parsed.error.issues, rawInput), ), ); - return analyzeJavaScriptApplicationValidated(authority, parsed.data, options); + return analyzeJavaScriptApplicationValidated(parsed.data, options); }; /** Analyze input already parsed by a trusted adapter boundary. */ export const analyzeJavaScriptApplicationValidated = async ( - authority: PermissionAuthority | undefined, input: z.output, options: ExecutionOptions = {}, ): Promise> => { - if (authority === undefined) - return err( - new AnalysisCapabilityUnavailableError( - "rea-javascript-application", - OPERATION, - "JavaScript application permission policy is not configured", - ), - ); - const authorized = await authority.authorize( - { - capability: "investigation_input", - roots: [input.input_path], - executables: [], - environment_names: [], - network: "none", - mount: false, - operation_identity: `${OPERATION}:${input.input_path}`, - }, - "read", - ); - if (!authorized.ok) - return err( - authorized.error instanceof PermissionRequiredError - ? authorized.error - : new ArtifactOperationError(OPERATION, "path", { - logicalPath: input.input_path, - declaredSha256: null, - calculatedSha256: null, - unpacked: false, - }), - ); await options.progress?.report({ phase: "analyze_javascript_application", completed: 0, total: 1, - message: "Inventorying and parsing approved application artifacts", + message: "Inventorying and parsing application artifacts", }); try { const reconstructed = await reconstructJavaScriptArtifact( { input_path: input.input_path, format: input.format, - source_map_read_approved: input.source_map_read_approved, limits: input.limits, }, options.signal, ); const { electron_summary: summary, ...application } = reconstructed; const result = javascriptApplicationAnalysisResultSchema.parse({ - schema_version: 2, ...application, summary, limitations: reconstructed.graph.limitations, diff --git a/src/application/JavaScriptApplicationWorkflowService.ts b/src/application/JavaScriptApplicationWorkflowService.ts index 29f23173fb..4a98acd794 100644 --- a/src/application/JavaScriptApplicationWorkflowService.ts +++ b/src/application/JavaScriptApplicationWorkflowService.ts @@ -60,7 +60,6 @@ export const traceApplicationFeatureEvidenceValidated = ( nativeEvidence, seed: input.seed, direction: input.direction, - limits: input.limits, }); return ok( createApplicationFeatureTraceEvidence( @@ -69,7 +68,6 @@ export const traceApplicationFeatureEvidenceValidated = ( native_evidence_ids: nativeEvidence.map(({ evidence_id: id }) => id), seed: input.seed, direction: input.direction, - limits: input.limits, }, result, ), diff --git a/src/application/JavaScriptArtifactAnalysis.ts b/src/application/JavaScriptArtifactAnalysis.ts index 30e18ccbeb..2940367242 100644 --- a/src/application/JavaScriptArtifactAnalysis.ts +++ b/src/application/JavaScriptArtifactAnalysis.ts @@ -100,11 +100,6 @@ const finalizeArtifactAnalysis = ( limitations: [ "JavaScript and HTML were parsed as inert text; bundle bootstrap code was never executed.", "Static paths and relationships may remain unresolved when expressions are dynamic or obfuscated.", - ...(input.source_map_read_approved - ? [] - : [ - "Source maps were inventoried but their contents were not read without separate approval.", - ]), ...(truncatedScopes === 0 ? [] : ["One or more static-analysis scopes reached an approved bound."]), @@ -419,16 +414,14 @@ const unavailableSourceMap = ( ): JavaScriptSourceMapObservation => { if (file.text.included) throw new TypeError("Expected unavailable source-map text"); - const notApproved = file.text.reason === "not-approved"; return { path: file.path, sha256: file.sha256, - status: notApproved ? "not-approved" : "invalid", + status: "invalid", sources: [], omitted_sources: 0, - limitation: notApproved - ? "Source-map content requires separate approval." - : "Source-map text was unavailable within approved limits.", + limitation: + "Source-map text was unavailable within the selected input limits.", }; }; diff --git a/src/application/JavaScriptArtifactAnalysisTypes.ts b/src/application/JavaScriptArtifactAnalysisTypes.ts index 0dd9c93450..bac87494ad 100644 --- a/src/application/JavaScriptArtifactAnalysisTypes.ts +++ b/src/application/JavaScriptArtifactAnalysisTypes.ts @@ -45,7 +45,7 @@ export interface JavaScriptHtmlScriptObservation { readonly location: JavaScriptSourceRange; } -/** One original source declared by an approved local source map. */ +/** One original source declared by a local source map. */ export interface JavaScriptSourceMapOriginal { readonly source: string; readonly content: string | null; @@ -68,7 +68,7 @@ export type JavaScriptSourceMapObservation = JavaScriptStructuredObservation & readonly limitation: string; } | { - readonly status: "invalid" | "not-approved"; + readonly status: "invalid"; readonly sources: readonly []; readonly omitted_sources: 0; readonly limitation: string; diff --git a/src/application/JavaScriptArtifactFiles.ts b/src/application/JavaScriptArtifactFiles.ts index d3e9f1698c..d94a71824a 100644 --- a/src/application/JavaScriptArtifactFiles.ts +++ b/src/application/JavaScriptArtifactFiles.ts @@ -40,7 +40,6 @@ export interface JavaScriptArtifactFile { readonly included: false; readonly reason: | "not-applicable" - | "not-approved" | "file-limit" | "byte-limit" | "invalid-utf8"; @@ -63,7 +62,6 @@ export interface JavaScriptArtifactFileSet { readonly text_bytes_read: number; readonly omitted_text_files: number; readonly limit_omitted_text_files: number; - readonly policy_filtered_text_files: number; readonly invalid_utf8_files: number; } @@ -77,7 +75,7 @@ interface ExpectedFile { interface Selection { readonly selected: boolean; - readonly reason: "file-limit" | "byte-limit" | "not-approved" | null; + readonly reason: "file-limit" | "byte-limit" | null; } interface ReadContext { @@ -143,9 +141,6 @@ export const readJavaScriptArtifactFiles = async ( limit_omitted_text_files: [...selections.values()].filter( ({ reason }) => reason === "file-limit" || reason === "byte-limit", ).length, - policy_filtered_text_files: [...selections.values()].filter( - ({ reason }) => reason === "not-approved", - ).length, invalid_utf8_files: context.invalidUtf8, }; }; @@ -306,10 +301,6 @@ const selectTextFiles = ( }); for (const file of ordered) { if (file.kind === "native-addon") continue; - if (file.kind === "source-map" && !input.source_map_read_approved) { - selected.set(file.path, { selected: false, reason: "not-approved" }); - continue; - } if ( fileCount >= input.limits.max_text_files || file.bytes > input.limits.max_text_file_bytes diff --git a/src/application/JavaScriptArtifactGraphBuilder.ts b/src/application/JavaScriptArtifactGraphBuilder.ts index 47217bba08..639029aaef 100644 --- a/src/application/JavaScriptArtifactGraphBuilder.ts +++ b/src/application/JavaScriptArtifactGraphBuilder.ts @@ -38,7 +38,7 @@ import { collectElectronIpcRecords, } from "./ElectronBoundaryAnalysis.js"; -/** Project bounded artifact and AST facts into JavaScript Application Graph v1. */ +/** Project bounded artifact and AST facts into JavaScript Application Graph. */ export const buildJavaScriptArtifactGraph = ( snapshot: ArtifactInventorySnapshot, fileSet: JavaScriptArtifactFileSet, @@ -75,7 +75,6 @@ export const buildJavaScriptArtifactGraph = ( const coverage = graphCoverage(context); return createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: packageRoots.length === 0 ? [root.node_id] @@ -92,7 +91,7 @@ const graphCoverage = (context: JavaScriptArtifactGraphContext) => { context.fileSet.limit_omitted_text_files + context.accumulator.omittedObservations(); const sourceMapPolicyGap = context.analysis.source_maps.some( - ({ status }) => status === "not-approved", + ({ status }) => status === "invalid", ); const malformedStructuredData = context.analysis.packages.some(({ status }) => status !== "included") || diff --git a/src/application/JavaScriptArtifactGraphStructure.ts b/src/application/JavaScriptArtifactGraphStructure.ts index 7d31ca3638..d02f2e54f4 100644 --- a/src/application/JavaScriptArtifactGraphStructure.ts +++ b/src/application/JavaScriptArtifactGraphStructure.ts @@ -187,10 +187,7 @@ export const addJavaScriptArtifactFiles = ( const sourceMap = context.analysis.source_maps.find( ({ path }) => path === file.path, ); - if ( - sourceMap !== undefined && - (sourceMap.status === "invalid" || sourceMap.status === "not-approved") - ) + if (sourceMap !== undefined && sourceMap.status === "invalid") addUnavailableStaticParseScope(context, { file, asset: target, diff --git a/src/application/JavaScriptArtifactReconstruction.ts b/src/application/JavaScriptArtifactReconstruction.ts index c305d4ef22..d977a4af88 100644 --- a/src/application/JavaScriptArtifactReconstruction.ts +++ b/src/application/JavaScriptArtifactReconstruction.ts @@ -39,7 +39,6 @@ export interface JavaScriptArtifactReconstructionResult { readonly text_bytes_read: number; readonly omitted_text_files: number; readonly limit_omitted_text_files: number; - readonly policy_filtered_text_files: number; readonly invalid_utf8_files: number; readonly parsed_javascript_files: number; readonly visited_ast_nodes: number; @@ -109,7 +108,6 @@ export const reconstructJavaScriptArtifact = async ( text_bytes_read: files.text_bytes_read, omitted_text_files: files.omitted_text_files, limit_omitted_text_files: files.limit_omitted_text_files, - policy_filtered_text_files: files.policy_filtered_text_files, invalid_utf8_files: files.invalid_utf8_files, parsed_javascript_files: analysis.files.filter( ({ javascript }) => javascript !== null, diff --git a/src/application/JavaScriptArtifactReconstructionInput.ts b/src/application/JavaScriptArtifactReconstructionInput.ts index 6f46a89c45..20f1ca3ea4 100644 --- a/src/application/JavaScriptArtifactReconstructionInput.ts +++ b/src/application/JavaScriptArtifactReconstructionInput.ts @@ -6,11 +6,10 @@ import { javascriptApplicationAnalysisLimitsSchema, } from "../domain/javascriptApplicationAnalysis.js"; -/** Local ASAR/directory reconstruction request with explicit source-map authority. */ +/** Local ASAR/directory reconstruction request. */ export const javascriptArtifactReconstructionInputSchema = z.strictObject({ - input_path: z.string().min(1).max(16_384), + input_path: z.string().min(1), format: z.enum(["auto", "asar", "directory"]).default("auto"), - source_map_read_approved: z.boolean().default(false), limits: javascriptApplicationAnalysisLimitsSchema.default( JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS, ), diff --git a/src/application/JavaScriptRuntimeObservationEvidence.ts b/src/application/JavaScriptRuntimeObservationEvidence.ts index 4fffdc9a08..9e829f4578 100644 --- a/src/application/JavaScriptRuntimeObservationEvidence.ts +++ b/src/application/JavaScriptRuntimeObservationEvidence.ts @@ -16,7 +16,7 @@ type RuntimeObservationOperation = | "list_javascript_runtime_targets" | "observe_javascript_runtime"; -/** Create deterministic Evidence v2 for one passive Inspector operation. */ +/** Create deterministic Evidence for one passive Inspector operation. */ export const createJavaScriptRuntimeObservationEvidence = ( operation: RuntimeObservationOperation, input: ListJavaScriptRuntimeTargetsInput | ObserveJavaScriptRuntimeInput, @@ -56,5 +56,5 @@ const parameters = ( observation_ms: input.observation_ms, limits: input.limits, } - : { offset: input.offset, limit: input.limit }), + : {}), }); diff --git a/src/application/JavaScriptRuntimeReconciliationEvidence.ts b/src/application/JavaScriptRuntimeReconciliationEvidence.ts index 44ef909113..23bb3f7b33 100644 --- a/src/application/JavaScriptRuntimeReconciliationEvidence.ts +++ b/src/application/JavaScriptRuntimeReconciliationEvidence.ts @@ -10,7 +10,7 @@ import type { import { jsonValueSchema } from "../domain/jsonValue.js"; import { JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER } from "./InvestigationProviders.js"; -/** Create derived Evidence v2 for one exact set of static/runtime inputs. */ +/** Create derived Evidence for one exact set of static/runtime inputs. */ export const createJavaScriptRuntimeReconciliationEvidence = ( input: ReconcileJavaScriptRuntimeInput, result: JavaScriptRuntimeReconciliationResult, diff --git a/src/application/JavaScriptSemanticGraphBuilder.ts b/src/application/JavaScriptSemanticGraphBuilder.ts index 069cec254e..9d6763741c 100644 --- a/src/application/JavaScriptSemanticGraphBuilder.ts +++ b/src/application/JavaScriptSemanticGraphBuilder.ts @@ -101,7 +101,6 @@ export const buildJavaScriptSemanticGraph = ({ const unknowns = [...state.unknowns.values()]; return createJavaScriptSemanticGraph({ schema: "JavaScriptSemanticRelationGraph", - schema_version: 1, root_artifact_sha256: rootArtifactSha256, application_graph_id: applicationGraph.graph_id, root_node_ids: [...state.roots], diff --git a/src/application/JavaScriptSemanticTraceService.ts b/src/application/JavaScriptSemanticTraceService.ts index 7c5c3d340a..d776b22aea 100644 --- a/src/application/JavaScriptSemanticTraceService.ts +++ b/src/application/JavaScriptSemanticTraceService.ts @@ -32,7 +32,7 @@ export const traceJavaScriptSemanticsEvidenceValidated = ( path: ["application"], reason: "invalid_value", expected: - "analyze_javascript_application v2 Evidence; reanalyze the artifact with the current REA version", + "inline Evidence from analyze_javascript_application with a semantic graph", }, ]), ); diff --git a/src/application/ManagedApplicationGraphService.ts b/src/application/ManagedApplicationGraphService.ts index 17fe138b99..9a63dec38b 100644 --- a/src/application/ManagedApplicationGraphService.ts +++ b/src/application/ManagedApplicationGraphService.ts @@ -53,7 +53,6 @@ const createManagedApplicationGraphEvidence = ( managed_members_evidence_id: input.managed_members?.evidence_id ?? null, managed_native_boundaries_evidence_id: input.managed_native_boundaries?.evidence_id ?? null, - limits: jsonValueSchema.parse(input.limits), }, result: jsonValueSchema.parse( managedApplicationGraphResultSchema.parse(result), diff --git a/src/application/ManagedMemberComparisonService.ts b/src/application/ManagedMemberComparisonService.ts index 8956745ce5..982e7f73d8 100644 --- a/src/application/ManagedMemberComparisonService.ts +++ b/src/application/ManagedMemberComparisonService.ts @@ -25,6 +25,7 @@ import { MANAGED_STATIC_PROVIDER, MANAGED_WORKFLOW_PROVIDER, } from "./InvestigationProviders.js"; +import { MANAGED_INSPECTION_DEFAULTS } from "../dotnet/ManagedInspectionDefaults.js"; /** Compare managed members from input parsed by a trusted adapter. */ export const compareManagedMembersEvidenceValidated = ( @@ -37,7 +38,6 @@ export const compareManagedMembersEvidenceValidated = ( const result = compareManagedMembers( { evidenceId: left.evidenceId, result: left.result }, { evidenceId: right.evidenceId, result: right.result }, - input.limits, ); return ok(createManagedMemberComparisonEvidence(input, result)); } catch (cause: unknown) { @@ -49,11 +49,13 @@ export const compareManagedMembersEvidenceValidated = ( export const compareManagedMemberPaths = async (input: { readonly leftPath: string; readonly rightPath: string; - readonly memberLimits: ManagedMemberPathInspectionLimits; - readonly comparisonLimits: CompareManagedMembersInput["limits"]; }): Promise> => { const operation = "compare_managed_members"; try { + const memberLimits: ManagedMemberPathInspectionLimits = { + ...MANAGED_INSPECTION_DEFAULTS, + maxFileBytes: MANAGED_INSPECTION_DEFAULTS.maxFileBytes, + }; const [leftTarget, rightTarget] = await Promise.all([ parseBinaryTarget(input.leftPath), parseBinaryTarget(input.rightPath), @@ -71,13 +73,13 @@ export const compareManagedMemberPaths = async (input: { stat(rightTarget.value.path), ]); if ( - leftStat.size > input.memberLimits.maxFileBytes || - rightStat.size > input.memberLimits.maxFileBytes + leftStat.size > memberLimits.maxFileBytes || + rightStat.size > memberLimits.maxFileBytes ) return err( new AnalysisInputError(operation, { cause: new RangeError( - `Managed comparison input exceeds max_file_bytes ${String(input.memberLimits.maxFileBytes)}`, + `Managed comparison input exceeds max_file_bytes ${String(memberLimits.maxFileBytes)}`, ), }), ); @@ -88,19 +90,19 @@ export const compareManagedMemberPaths = async (input: { const leftInspection = inspectManagedMembersBytes( leftBytes, leftTarget.value, - input.memberLimits, + memberLimits, ); const rightInspection = inspectManagedMembersBytes( rightBytes, rightTarget.value, - input.memberLimits, + memberLimits, ); const leftEvidence = createEvidence( leftTarget.value, MANAGED_STATIC_PROVIDER, { operation: "inspect_managed_members", - parameters: memberLimitParameters(input.memberLimits), + parameters: memberLimitParameters(memberLimits), result: jsonValueSchema.parse(leftInspection), rawResult: null, limitations: leftInspection.limitations, @@ -112,7 +114,7 @@ export const compareManagedMemberPaths = async (input: { MANAGED_STATIC_PROVIDER, { operation: "inspect_managed_members", - parameters: memberLimitParameters(input.memberLimits), + parameters: memberLimitParameters(memberLimits), result: jsonValueSchema.parse(rightInspection), rawResult: null, limitations: rightInspection.limitations, @@ -128,14 +130,12 @@ export const compareManagedMemberPaths = async (input: { evidenceId: rightEvidence.evidence_id, result: rightInspection, }, - input.comparisonLimits, ); return ok( createManagedMemberComparisonEvidence( { left: leftEvidence, right: rightEvidence, - limits: input.comparisonLimits, }, result, ), @@ -152,7 +152,7 @@ export interface ManagedMemberPathInspectionLimits } const createManagedMemberComparisonEvidence = ( - parameters: Pick, + parameters: Pick, result: z.infer, ): Evidence => createEvidence(undefined, MANAGED_WORKFLOW_PROVIDER, { @@ -161,7 +161,6 @@ const createManagedMemberComparisonEvidence = ( parameters: { left_evidence_id: parameters.left.evidence_id, right_evidence_id: parameters.right.evidence_id, - limits: jsonValueSchema.parse(parameters.limits), }, result: jsonValueSchema.parse(result), rawResult: null, @@ -175,17 +174,6 @@ const createManagedMemberComparisonEvidence = ( const memberLimitParameters = ( limits: ManagedMemberPathInspectionLimits, ): Record> => ({ - type_offset: limits.typeOffset, - type_limit: limits.typeLimit, - method_offset: limits.methodOffset, - method_limit: limits.methodLimit, - field_offset: limits.fieldOffset, - field_limit: limits.fieldLimit, - member_ref_offset: limits.memberRefOffset, - member_ref_limit: limits.memberRefLimit, - edge_offset: limits.edgeOffset, - edge_limit: limits.edgeLimit, - instruction_anchor_limit: limits.instructionAnchorLimit, max_file_bytes: limits.maxFileBytes, max_metadata_bytes: limits.maxMetadataBytes, max_table_rows: limits.maxTableRows, diff --git a/src/application/ManagedNativeVerificationService.ts b/src/application/ManagedNativeVerificationService.ts index 9bdc80196e..95865bd553 100644 --- a/src/application/ManagedNativeVerificationService.ts +++ b/src/application/ManagedNativeVerificationService.ts @@ -52,7 +52,6 @@ const createManagedNativeVerificationEvidence = ( native_evidence_ids: jsonValueSchema.parse( input.native_observations.map(({ evidence_id: id }) => id), ), - limits: jsonValueSchema.parse(input.limits), }, result: jsonValueSchema.parse(result), rawResult: null, diff --git a/src/application/ManagedReconstructionService.test.ts b/src/application/ManagedReconstructionService.test.ts index 0706ef7c67..e891479d80 100644 --- a/src/application/ManagedReconstructionService.test.ts +++ b/src/application/ManagedReconstructionService.test.ts @@ -27,7 +27,6 @@ describe("managed decompiler reconstruction import", () => { const result = importManagedReconstruction(exampleInput()); expect(result).toMatchObject({ - schema_version: 1, phase: "reconstruction-import", executed: false, static_observation: { @@ -104,25 +103,22 @@ describe("managed decompiler reconstruction import", () => { const observed = managedMemberInspectionSchema.parse( input.static_members.normalized_result, ); - const method = observed.methods.items[0]; + const method = observed.methods[0]; if (method === undefined) throw new Error("missing observed method"); const partial = { ...observed, - methods: { - ...observed.methods, - items: [ - { - ...method, - body: { - ...method.body, - status: "partial" as const, - normalized_il_sha256: null, - truncated_instructions: 1, - issue: "instruction limit reached", - }, + methods: [ + { + ...method, + body: { + ...method.body, + status: "partial" as const, + normalized_il_sha256: null, + truncated_instructions: 1, + issue: "instruction limit reached", }, - ], - }, + }, + ], coverage: { state: "partial" as const, issues: [] }, }; const partialEvidence = createEvidence( diff --git a/src/application/NativeApiInspection.test.ts b/src/application/NativeApiInspection.test.ts index d6e1ef4c4b..2a1f6acf5e 100644 --- a/src/application/NativeApiInspection.test.ts +++ b/src/application/NativeApiInspection.test.ts @@ -10,7 +10,6 @@ describe("native API inspection", () => { const dossier = functionDossierSchema.parse(ghidraFunctionDossier()); expect(projectNativeApiInspection(dossier)).toMatchObject({ - schema_version: 1, procedure: { address: "0x401000", name: "fixture_main" }, boundary: { available: true, diff --git a/src/application/NativeApiInspection.ts b/src/application/NativeApiInspection.ts index 7994aa34f0..e2c10ab5e5 100644 --- a/src/application/NativeApiInspection.ts +++ b/src/application/NativeApiInspection.ts @@ -27,7 +27,6 @@ export const projectNativeApiInspection = ( ? availableResidualUnknowns(boundary) : boundary.residual_unknowns; return nativeApiInspectionResultSchema.parse({ - schema_version: 1, procedure: { address: dossier.procedure.address, name: dossier.procedure.name, diff --git a/src/application/NodeRuntimeCharacterizationService.ts b/src/application/NodeRuntimeCharacterizationService.ts index 667fa3b0bf..34a738c627 100644 --- a/src/application/NodeRuntimeCharacterizationService.ts +++ b/src/application/NodeRuntimeCharacterizationService.ts @@ -129,7 +129,6 @@ export const executeNodeCharacterization = async ( return ok( jsonValueSchema.parse( nodeCharacterizationExecutionOutputSchema.parse({ - schema_version: 1, phase: "execution", plan: prepared.value.plan, transformation: host.instrumentation.manifest, @@ -148,7 +147,6 @@ const prepareValidated = async ( ): Promise< Result< { - readonly schema_version: 1; readonly phase: "preparation"; readonly plan: RuntimeCharacterizationPlan; readonly transformation: NonNullable< @@ -192,7 +190,6 @@ const prepareValidated = async ( output.plan, ); return ok({ - schema_version: 1, phase: "preparation", plan, transformation: host.instrumentation.manifest, diff --git a/src/application/ProcessCaptureLifecycle.ts b/src/application/ProcessCaptureLifecycle.ts index 411d900b21..ccc13ba622 100644 --- a/src/application/ProcessCaptureLifecycle.ts +++ b/src/application/ProcessCaptureLifecycle.ts @@ -110,7 +110,6 @@ export type PendingProcessCapture = Omit< export const buildCaptureResult = ( options: CaptureResultOptions, ): PendingProcessCapture => ({ - schema_version: 4, manifest: options.manifest, normalization: options.scenario.normalization, frames: options.frames, diff --git a/src/application/ProcessCli.ts b/src/application/ProcessCli.ts index be1d390c99..d3316d3ffb 100644 --- a/src/application/ProcessCli.ts +++ b/src/application/ProcessCli.ts @@ -13,7 +13,6 @@ import { projectInputIssues } from "../domain/inputIssueProjection.js"; import { processTraceSpecificationSchema } from "../domain/processTraceComparison.js"; import { compareProcessCaptures, - LEGACY_PROCESS_CAPTURE_MESSAGE, parseProcessScenario, parseProcessCapture, } from "../domain/processCapture.js"; @@ -88,10 +87,7 @@ export const compareProcessEvidenceFiles = async ( traceSpecification, }); return createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: - traceSpecification === undefined - ? "rea.process-comparison/v3" - : "rea.process-comparison/v4", + predicateType: "rea.process-comparison", operation: "compare_process_captures", parameters: { left_evidence_id: left.id, @@ -123,15 +119,10 @@ const parseCaptureEvidence = (input: unknown) => { } if ( evidence.operation !== "capture_process_scenario" || - evidence.predicate_type !== "rea.process-capture/v4" || + evidence.predicate_type !== "rea.process-capture" || evidence.provider.id !== PROCESS_PROVIDER.id || evidence.provider.version !== PROCESS_PROVIDER.version ) { - if (evidence.predicate_type === "rea.process-capture/v3") - throw new ProcessCliFailure( - "invalid_input", - LEGACY_PROCESS_CAPTURE_MESSAGE, - ); throw new ProcessCliFailure( "invalid_input", "Capture evidence is not from the current process-capture workflow. Create new capture evidence, then try again.", diff --git a/src/application/ProcessEvidence.ts b/src/application/ProcessEvidence.ts index 7d6178a6c3..16b45a94fa 100644 --- a/src/application/ProcessEvidence.ts +++ b/src/application/ProcessEvidence.ts @@ -6,7 +6,7 @@ import type { ProcessScenario, } from "../domain/processCapture.js"; -/** Provider identity for controlled Process Capture v4 evidence. */ +/** Provider identity for controlled process capture evidence. */ export const PROCESS_PROVIDER = { id: "rea-process", name: "REA deterministic process harness", @@ -26,13 +26,13 @@ const processEvidenceParameters = ( normalization: scenario.normalization, }); -/** Create one canonical observed Process Capture v4 Evidence record. */ +/** Create one canonical observed process capture Evidence record. */ export const createProcessCaptureEvidence = ( scenario: ProcessScenario, capture: ProcessCapture, ) => { return createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-capture/v4", + predicateType: "rea.process-capture", operation: "capture_process_scenario", parameters: processEvidenceParameters(scenario), result: jsonValueSchema.parse(capture), diff --git a/src/application/RealHopperAssertions.ts b/src/application/RealHopperAssertions.ts index 56386e1187..65d1d8e018 100644 --- a/src/application/RealHopperAssertions.ts +++ b/src/application/RealHopperAssertions.ts @@ -2,27 +2,12 @@ import { z } from "zod"; const addressSchema = z.string().regex(/^0x[0-9a-f]+$/iu); const identitySchema = z.object({ address: addressSchema, name: z.string() }); -const collectionSchema = z.object({ - items: z.array(z.unknown()), - total: z.number().int().min(0).nullable(), - returned: z.number().int().min(0), - truncated: z.boolean(), - next_offset: z.number().int().min(0).nullable(), -}); - -/** Extract a real address from the provider's exact procedure page. */ +/** Extract one real procedure address from the complete inline inventory. */ export const firstProcedureAddress = (input: unknown): string => { - const page = z - .object({ - items: z.array(z.object({ address: addressSchema })).min(1), - offset: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(1), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), - }) - .parse(input); - const first = page.items[0]; + const first = z + .array(z.object({ address: addressSchema })) + .min(1) + .parse(input)[0]; if (first === undefined) throw new TypeError("Procedure page was empty"); return first.address; }; @@ -56,7 +41,7 @@ export const requirePseudocode = ( return input; }; -/** Validate an exact bounded Hopper function dossier semantically. */ +/** Validate a complete Hopper function dossier semantically. */ export const requireFunctionDossier = ( input: unknown, expectedAddress: string, @@ -70,13 +55,11 @@ export const requireFunctionDossier = ( throw new TypeError("analyze_function returned the wrong procedure"); if (procedure.name.trim().length === 0) throw new TypeError("analyze_function omitted the procedure name"); - validatePseudocodeBounds(value.pseudocode); - for (const field of COLLECTION_FIELDS) - validateCollection(value[field], field); + requirePseudocode(value.pseudocode, "analyze_function"); + for (const field of COLLECTION_FIELDS) list(value, field); for (const field of ["callers", "callees"] as const) - z.array(identitySchema).parse(collectionSchema.parse(value[field]).items); - validateBlocks(collectionSchema.parse(value.basic_blocks).items); - validateInstructionScan(value.instruction_scan); + z.array(identitySchema).parse(list(value, field)); + validateBlocks(list(value, "basic_blocks")); return value; }; @@ -99,9 +82,7 @@ export const requireFunctionDossierOracle = ( ): Record => { const value = requireFunctionDossier(input, oracle.procedure_address); if (oracle.callee_address !== undefined) { - const callees = z - .array(identitySchema) - .parse(collectionSchema.parse(value.callees).items); + const callees = z.array(identitySchema).parse(list(value, "callees")); if (!callees.some(({ address }) => address === oracle.callee_address)) throw new TypeError( "analyze_function omitted the expected fixture callee", @@ -114,7 +95,7 @@ export const requireFunctionDossierOracle = ( target_address: addressSchema, }), ) - .parse(collectionSchema.parse(value.outgoing_references).items); + .parse(list(value, "outgoing_references")); if ( !references.some( ({ target_address }) => target_address === oracle.callee_address, @@ -126,9 +107,7 @@ export const requireFunctionDossierOracle = ( } if (oracle.caller_address !== undefined) { - const callers = z - .array(identitySchema) - .parse(collectionSchema.parse(value.callers).items); + const callers = z.array(identitySchema).parse(list(value, "callers")); if (!callers.some(({ address }) => address === oracle.caller_address)) throw new TypeError( "analyze_function omitted the expected fixture caller", @@ -160,7 +139,7 @@ export const requireFunctionDossierOracle = ( text: z.string(), }), ) - .parse(collectionSchema.parse(value.comments).items); + .parse(list(value, "comments")); if ( !comments.some( ({ address, kind, text }) => @@ -172,16 +151,13 @@ export const requireFunctionDossierOracle = ( throw new TypeError("analyze_function omitted the verifier comment"); } - if ( - oracle.require_assembly === true && - collectionSchema.parse(value.assembly).items.length === 0 - ) + if (oracle.require_assembly === true && list(value, "assembly").length === 0) throw new TypeError("analyze_function omitted fixture assembly"); if (oracle.require_cfg_successor) { const blocks = z .array(z.object({ successors: z.array(addressSchema) })) - .parse(collectionSchema.parse(value.basic_blocks).items); + .parse(list(value, "basic_blocks")); if (!blocks.some(({ successors }) => successors.length > 0)) throw new TypeError("analyze_function omitted a real CFG successor"); } @@ -205,12 +181,10 @@ const requireReferencedValue = ( expected: string, normalize: (value: string) => string, ): void => { - const values = z - .array(referencedValueSchema) - .parse(collectionSchema.parse(dossier[field]).items); + const values = z.array(referencedValueSchema).parse(list(dossier, field)); const references = z .array(referenceEdgeSchema) - .parse(collectionSchema.parse(dossier.outgoing_references).items); + .parse(list(dossier, "outgoing_references")); const found = values.some( ({ address, value, source_address: sourceAddress }) => normalize(value) === expected && @@ -248,29 +222,8 @@ const COLLECTION_FIELDS = [ "basic_blocks", ] as const; -const validatePseudocodeBounds = (input: unknown): void => { - const pseudocode = z - .object({ - text: z.string(), - returned_chars: z.number().int().min(0), - total_chars: z.number().int().min(0), - }) - .parse(input); - const text = requirePseudocode(pseudocode.text, "analyze_function"); - if ( - pseudocode.returned_chars !== [...text].length || - pseudocode.total_chars < pseudocode.returned_chars - ) - throw new TypeError( - "analyze_function returned inconsistent pseudocode bounds", - ); -}; - -const validateCollection = (input: unknown, field: string): void => { - const collection = collectionSchema.parse(input); - if (collection.returned !== collection.items.length) - throw new TypeError(`analyze_function returned an invalid ${field} result`); -}; +const list = (value: Record, field: string): unknown[] => + z.array(z.unknown()).parse(value[field]); const validateBlocks = (items: readonly unknown[]): void => { for (const block of items) @@ -278,16 +231,6 @@ const validateBlocks = (items: readonly unknown[]): void => { throw new TypeError("analyze_function omitted CFG successor evidence"); }; -const validateInstructionScan = (input: unknown): void => { - const scan = z - .object({ scanned: z.number().int().min(0), truncated: z.boolean() }) - .parse(input); - if (scan.scanned === 0 && !scan.truncated) - throw new TypeError( - "analyze_function omitted instruction scan limitations", - ); -}; - const objectValue = ( input: unknown, message: string, diff --git a/src/application/ReconstructionObligationAuthority.ts b/src/application/ReconstructionObligationAuthority.ts index cf2813d9b9..1b43d315b8 100644 --- a/src/application/ReconstructionObligationAuthority.ts +++ b/src/application/ReconstructionObligationAuthority.ts @@ -103,7 +103,7 @@ export const evidenceSupportsOriginalAuthority = ( if (authority === "process") return ( evidence.operation === "capture_process_scenario" && - evidence.predicate_type === "rea.process-capture/v4" + evidence.predicate_type === "rea.process-capture" ); return evidence.authority === "external-service"; }; diff --git a/src/application/ReconstructionObligationCandidates.ts b/src/application/ReconstructionObligationCandidates.ts index b83100d657..ed887ce8d8 100644 --- a/src/application/ReconstructionObligationCandidates.ts +++ b/src/application/ReconstructionObligationCandidates.ts @@ -144,7 +144,7 @@ const deriveProcessCandidate = ( ): void => { if ( evidence.operation !== "capture_process_scenario" || - evidence.predicate_type !== "rea.process-capture/v4" + evidence.predicate_type !== "rea.process-capture" ) return; try { @@ -344,7 +344,7 @@ const reviewedEvidenceState = ( ): ReconstructionObligation["authority_references"][number]["state"] => { if ( evidence.operation === "capture_process_scenario" && - evidence.predicate_type === "rea.process-capture/v4" && + evidence.predicate_type === "rea.process-capture" && evidence.confidence === "observed" ) return "observed"; diff --git a/src/application/ReconstructionObligationLedger.authority.test.ts b/src/application/ReconstructionObligationLedger.authority.test.ts index 64376927ed..216884e2fd 100644 --- a/src/application/ReconstructionObligationLedger.authority.test.ts +++ b/src/application/ReconstructionObligationLedger.authority.test.ts @@ -33,7 +33,7 @@ const proofEvidence = (id: string) => const processEvidence = () => createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-capture/v4", + predicateType: "rea.process-capture", operation: "capture_process_scenario", parameters: {}, result: jsonValueSchema.parse( @@ -80,8 +80,7 @@ const request = ( ): ReconstructionObligationLedgerInput => ({ evidence_bundle: createEvidenceBundle(records), reviewed_obligations: [], - manifest: { schema_version: 1, bindings: [], contradictions: [] }, - limits: { max_obligations: 100 }, + manifest: { bindings: [], contradictions: [] }, page: { offset: 0, limit: 50 }, ...overrides, }); @@ -121,7 +120,6 @@ describe("reconstruction obligation ledger", () => { const result = build( request([capture, proof], { manifest: { - schema_version: 1, bindings: [ { obligation_id: obligation.obligation_id, @@ -224,7 +222,7 @@ describe("reconstruction obligation ledger", () => { const result = build( request([evidence], { reviewed_obligations: reviewed, - manifest: { schema_version: 1, bindings, contradictions: [] }, + manifest: { bindings, contradictions: [] }, }), ); @@ -297,7 +295,6 @@ describe("reconstruction obligation ledger fail-closed behavior", () => { request([original, proof], { reviewed_obligations: [reviewed], manifest: { - schema_version: 1, bindings: [binding, binding], contradictions: [ { diff --git a/src/application/ReconstructionObligationLedger.closure.test.ts b/src/application/ReconstructionObligationLedger.closure.test.ts index c9d5f0d6d9..da3b51fe91 100644 --- a/src/application/ReconstructionObligationLedger.closure.test.ts +++ b/src/application/ReconstructionObligationLedger.closure.test.ts @@ -34,7 +34,7 @@ const proofEvidence = (id: string) => const processEvidence = () => createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-capture/v4", + predicateType: "rea.process-capture", operation: "capture_process_scenario", parameters: {}, result: jsonValueSchema.parse( @@ -81,8 +81,7 @@ const request = ( ): ReconstructionObligationLedgerInput => ({ evidence_bundle: createEvidenceBundle(records), reviewed_obligations: [], - manifest: { schema_version: 1, bindings: [], contradictions: [] }, - limits: { max_obligations: 100 }, + manifest: { bindings: [], contradictions: [] }, page: { offset: 0, limit: 50 }, ...overrides, }); @@ -233,7 +232,6 @@ describe("reconstruction obligation ledger", () => { const result = build( request([capture, proof], { manifest: { - schema_version: 1, bindings: [unitBinding], contradictions: [], }, @@ -262,7 +260,6 @@ describe("reconstruction obligation ledger case closure", () => { const result = build( request([capture, proof], { manifest: { - schema_version: 1, bindings: [ { obligation_id: obligation.obligation_id, @@ -335,7 +332,6 @@ describe("reconstruction obligation ledger case closure", () => { const result = build( request([capture, proof], { manifest: { - schema_version: 1, bindings: [ { obligation_id: obligation.obligation_id, diff --git a/src/application/ReconstructionObligationLedgerEvaluation.ts b/src/application/ReconstructionObligationLedgerEvaluation.ts index 8780c13579..e3601e0617 100644 --- a/src/application/ReconstructionObligationLedgerEvaluation.ts +++ b/src/application/ReconstructionObligationLedgerEvaluation.ts @@ -51,13 +51,11 @@ export const evaluateReconstructionObligationLedger = ({ candidates: candidatesInput, bundle: bundleInput, manifest, - maxObligations, generationLimitations, }: { readonly candidates: readonly ReconstructionObligationCandidate[]; readonly bundle: EvidenceBundle; readonly manifest: ReconstructionObligationManifest; - readonly maxObligations: number; readonly generationLimitations: readonly string[]; }): ReconstructionObligationLedger => { const bundle = parseEvidenceBundle(bundleInput); @@ -65,8 +63,7 @@ export const evaluateReconstructionObligationLedger = ({ left.obligation_id.localeCompare(right.obligation_id), ); const orphanManifestIds = findOrphanManifestIds(allCandidates, manifest); - const candidates = allCandidates.slice(0, maxObligations); - const omittedCount = allCandidates.length - candidates.length; + const candidates = allCandidates; const context = createEvaluationContext(candidates, bundle, manifest); const obligations = applyDependencyDiagnostics( candidates.map((candidate) => evaluateObligation(candidate, context)), @@ -97,14 +94,9 @@ export const evaluateReconstructionObligationLedger = ({ const limitations = ledgerLimitations( generationLimitations, allCandidates.length, - omittedCount, orphanManifestIds, ); - const coverage = obligationLedgerCoverage( - omittedCount, - maxObligations, - limitations.length > 0, - ); + const coverage = obligationLedgerCoverage(limitations.length > 0); const semantic = { coverage, summary: summarizeObligations(obligations), @@ -115,7 +107,7 @@ export const evaluateReconstructionObligationLedger = ({ evidence_links: evidenceLinks, limitations, }; - const evaluatedStatus = obligationLedgerStatus(obligations, omittedCount); + const evaluatedStatus = obligationLedgerStatus(obligations); const status = evaluatedStatus === "failed" ? evaluatedStatus @@ -129,7 +121,6 @@ export const evaluateReconstructionObligationLedger = ({ }); return reconstructionObligationLedgerSchema.parse({ schema: "ReconstructionObligationLedger", - schema_version: 1, ledger_id: `rol_${digestObligationLedgerValue({ schema: "rea.reconstruction-obligation-ledger/v1", evidence_ids: bundle.records.map(({ evidence_id: id }) => id), @@ -181,7 +172,6 @@ const findOrphanManifestIds = ( const ledgerLimitations = ( generationLimitations: readonly string[], candidateCount: number, - omittedCount: number, orphanManifestIds: readonly string[], ): string[] => [ @@ -192,11 +182,6 @@ const ledgerLimitations = ( "No reconstruction obligations were derived; closure cannot be claimed.", ] : []), - ...(omittedCount > 0 - ? [ - `${String(omittedCount)} obligation candidates were omitted by max_obligations; closure is unknown.`, - ] - : []), ...(orphanManifestIds.length > 0 ? [ `Manifest entries reference unknown obligations: ${orphanManifestIds.join(", ")}.`, diff --git a/src/application/ReconstructionObligationLedgerProjection.ts b/src/application/ReconstructionObligationLedgerProjection.ts index 872f4f01e5..89c6d65856 100644 --- a/src/application/ReconstructionObligationLedgerProjection.ts +++ b/src/application/ReconstructionObligationLedgerProjection.ts @@ -11,14 +11,9 @@ import type { type DiagnosticCode = ReconstructionObligation["diagnostics"][number]["code"]; export const obligationLedgerCoverage = ( - omittedCount: number, - maxObligations: number, incomplete: boolean, ): ReconstructionObligationLedger["coverage"] => ({ status: incomplete ? "partial" : "complete", - truncated: omittedCount > 0, - omitted_count: omittedCount, - max_obligations: maxObligations, }); export const summarizeObligations = ( @@ -103,7 +98,6 @@ export const obligationLedgerEvidenceLinks = ( export const obligationLedgerStatus = ( obligations: readonly ReconstructionObligation[], - omittedCount: number, ): ReconstructionObligationLedger["status"] => { if (obligations.length === 0) return "unknown"; const requiredOpen = obligations.filter( @@ -117,11 +111,7 @@ export const obligationLedgerStatus = ( ) ) return "failed"; - if ( - omittedCount > 0 || - requiredOpen.some(({ status }) => status === "unknown") - ) - return "unknown"; + if (requiredOpen.some(({ status }) => status === "unknown")) return "unknown"; return requiredOpen.length === 0 ? "ready" : "open"; }; diff --git a/src/application/ReconstructionObligationLedgerService.ts b/src/application/ReconstructionObligationLedgerService.ts index b686e46f3b..15fae4fdca 100644 --- a/src/application/ReconstructionObligationLedgerService.ts +++ b/src/application/ReconstructionObligationLedgerService.ts @@ -30,7 +30,7 @@ export const resolveReconstructionObligationLedgerRequest = ( : err(new AnalysisInputError(OPERATION, { cause: parsed.error })); }; -/** Build one deterministic ledger page and wrap it in portable Evidence v2. */ +/** Build one deterministic ledger page and wrap it in portable Evidence. */ export const buildReconstructionObligationLedgerEvidenceValidated = ( input: ReconstructionObligationLedgerInput, ): Result => { @@ -43,7 +43,6 @@ export const buildReconstructionObligationLedgerEvidenceValidated = ( candidates: generated.candidates, bundle: input.evidence_bundle, manifest: input.manifest, - maxObligations: input.limits.max_obligations, generationLimitations: generated.limitations, }); const page = pageLedger(ledger, input.page.offset, input.page.limit); @@ -94,7 +93,6 @@ const createLedgerEvidence = ( parameters: jsonObjectSchema.parse({ ledger_id: page.ledger_id, closure_digest: page.closure_digest, - limits: input.limits, page: input.page, }), result: jsonValueSchema.parse(page), diff --git a/src/application/ReconstructionReadinessService.ts b/src/application/ReconstructionReadinessService.ts index e7da145ffd..3f38abfb14 100644 --- a/src/application/ReconstructionReadinessService.ts +++ b/src/application/ReconstructionReadinessService.ts @@ -27,7 +27,7 @@ export const resolveReconstructionReadinessRequest = ( : err(new AnalysisInputError(OPERATION, { cause: parsed.error })); }; -/** Evaluate and wrap one deterministic readiness report in Evidence v2. */ +/** Evaluate and wrap one deterministic readiness report in Evidence. */ export const evaluateReconstructionReadinessValidated = ( input: ReconstructionReadinessInput, ): Result => { diff --git a/src/application/Setup.planning.test.ts b/src/application/Setup.planning.test.ts index 593e16d405..a36af1713f 100644 --- a/src/application/Setup.planning.test.ts +++ b/src/application/Setup.planning.test.ts @@ -1,25 +1,9 @@ import { describe, expect, it } from "vitest"; -import { - registrationPermissionEnvironment, - runSetup, - type SetupProgressEvent, -} from "./Setup.js"; +import { runSetup, type SetupProgressEvent } from "./Setup.js"; import { FakeSetupHost, options } from "./Setup.fixture.js"; describe("setup workflow", () => { - it("propagates only the explicit non-secret investigation root policy", () => { - expect( - registrationPermissionEnvironment({ - REA_INVESTIGATION_INPUT_ROOTS_JSON: '["/approved/apps"]', - AUTHORIZATION: "secret", - }), - ).toEqual({ - REA_INVESTIGATION_INPUT_ROOTS_JSON: '["/approved/apps"]', - }); - expect(registrationPermissionEnvironment({})).toEqual({}); - }); - it("returns a complete plan without mutation", async () => { const host = new FakeSetupHost(); host.clients = [{ name: "cursor", configPath: "/cursor.json" }]; diff --git a/src/application/Setup.ts b/src/application/Setup.ts index f74bddcb27..8f8f99b4c5 100644 --- a/src/application/Setup.ts +++ b/src/application/Setup.ts @@ -36,12 +36,8 @@ import { type SetupFailureCode, type SetupHopperInstallResult, } from "./SetupInstallFailure.js"; -import { - providerRegistrationEnvironment, - registrationPermissionEnvironment, -} from "./SetupRegistrationEnvironment.js"; +import { providerRegistrationEnvironment } from "./SetupRegistrationEnvironment.js"; export type { SetupHopperInstallResult } from "./SetupInstallFailure.js"; -export { registrationPermissionEnvironment } from "./SetupRegistrationEnvironment.js"; /** Exact non-secret provider variables propagated into managed registrations. */ export type SetupProviderEnvironment = Readonly>; @@ -483,7 +479,6 @@ export const systemSetupHost = ( const diagnosis = await runDoctor(undefined, doctorHost); return { ...providerRegistrationEnvironment(diagnosis.providerInspections ?? []), - ...registrationPermissionEnvironment(process.env), ...(diagnosis.hopperPath === undefined ? {} : { HOPPER_LAUNCHER_PATH: diagnosis.hopperPath }), diff --git a/src/application/SetupRegistrationEnvironment.ts b/src/application/SetupRegistrationEnvironment.ts index f3589c2e89..147d087027 100644 --- a/src/application/SetupRegistrationEnvironment.ts +++ b/src/application/SetupRegistrationEnvironment.ts @@ -1,15 +1,5 @@ import type { DoctorProviderInspection } from "./Doctor.js"; -/** Select explicit non-secret permission settings safe for managed MCP registrations. */ -export const registrationPermissionEnvironment = ( - environment: Readonly>, -): Readonly> => { - const investigationRoots = environment.REA_INVESTIGATION_INPUT_ROOTS_JSON; - return investigationRoots === undefined - ? {} - : { REA_INVESTIGATION_INPUT_ROOTS_JSON: investigationRoots }; -}; - /** Select exact non-secret settings published by available providers. */ export const providerRegistrationEnvironment = ( inspections: readonly DoctorProviderInspection[], diff --git a/src/application/StatusProjection.test.ts b/src/application/StatusProjection.test.ts deleted file mode 100644 index 6c69eeeb8b..0000000000 --- a/src/application/StatusProjection.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { runCapabilityStatus, runProviderStatus } from "./DirectAnalysis.js"; -import { createDoctorHostFixture } from "./Doctor.fixture.js"; -import { projectDoctorReport } from "./DoctorProjection.js"; -import { runDoctor } from "./Doctor.js"; - -describe("purpose-specific CLI projections", () => { - it("keeps provider and capability summaries concise with explicit full detail", async () => { - const providers = await runProviderStatus(); - const capabilities = await runCapabilityStatus(); - const full = await runCapabilityStatus(undefined, "full"); - - expect(providers).toMatchObject({ - open: false, - analysis_provider_candidates: expect.any(Array), - server_identity: { catalog: { counts: expect.any(Object) } }, - }); - expect(JSON.stringify(providers)).not.toContain('"capabilities"'); - expect(JSON.stringify(providers)).not.toContain('"tools"'); - expect(capabilities).toMatchObject({ - summary: { - total: expect.any(Number), - available: expect.any(Number), - unavailable: expect.any(Number), - }, - capabilities: expect.any(Array), - }); - expect(JSON.stringify(capabilities)).not.toContain('"effects"'); - expect(JSON.stringify(capabilities)).not.toContain('"limits"'); - expect(JSON.stringify(full)).toContain('"effects"'); - expect(JSON.stringify(full)).toContain('"catalog"'); - }); - - it("omits the catalog tool array only from the default doctor projection", async () => { - const report = await runDoctor( - undefined, - createDoctorHostFixture({ validTarget: () => Promise.resolve(true) }), - ); - const summary = projectDoctorReport(report, "summary"); - const full = projectDoctorReport(report, "full"); - - expect(summary).toMatchObject({ - healthy: true, - environment_healthy: true, - failed_scope_checks: [], - informational_drift_count: 0, - }); - expect(JSON.stringify(summary)).not.toContain('"tools"'); - expect(JSON.stringify(full)).toContain('"tools"'); - }); -}); diff --git a/src/artifacts/ArtifactProvider.ts b/src/artifacts/ArtifactProvider.ts index 7a4b9185d7..88f61f8b6f 100644 --- a/src/artifacts/ArtifactProvider.ts +++ b/src/artifacts/ArtifactProvider.ts @@ -7,7 +7,7 @@ import { type ProviderIdentity, type ExecutionOptions, } from "../application/AnalysisProvider.js"; -import { inventoryArtifact } from "../application/ArtifactInventory.js"; +import { inventoryArtifactFully } from "../application/ArtifactInventory.js"; import { extractArtifact } from "../application/ArtifactExtraction.js"; import { ARTIFACT_TOOL_CONTRACTS, @@ -50,8 +50,6 @@ export class ArtifactProvider implements AnalysisProvider { Object.freeze({ provider: IDENTITY, operation: contract.name, - inputContractVersion: 1, - outputContractVersion: 1, available: true as const, reason: null, pagination: @@ -133,9 +131,9 @@ class ArtifactClient implements AnalysisClient { inputFormat: this.target.format, outputRoot: parsed.output_root, occurrenceIds: parsed.occurrence_ids, - offset: parsed.offset, - limit: parsed.limit, - limits: limitsFrom(parsed), + offset: 0, + limit: parsed.occurrence_ids.length, + limits: DEFAULT_ARTIFACT_LIMITS, }, options?.signal, ); @@ -187,22 +185,10 @@ class ArtifactClient implements AnalysisClient { ) { const parsed = artifactInspectionInputSchema.parse(parameters); const inventoryParameters = artifactInventoryInputSchema.parse({ - node_offset: 0, - node_limit: parsed.max_observations, - occurrence_offset: 0, - occurrence_limit: parsed.max_observations, - edge_offset: 0, - edge_limit: parsed.max_relationships, native_mount_approved: parsed.native_mount_approved, integrity_policy: parsed.integrity_policy, integrity_continue_approved: parsed.integrity_continue_approved, max_integrity_mismatches: parsed.max_integrity_mismatches, - max_entries: parsed.max_entries, - max_total_bytes: parsed.max_total_bytes, - max_entry_bytes: parsed.max_entry_bytes, - max_compression_ratio: parsed.max_compression_ratio, - max_depth: parsed.max_depth, - max_path_bytes: parsed.max_path_bytes, }); await options?.progress?.report({ phase: "inspect_artifact.inventory", @@ -229,7 +215,7 @@ class ArtifactClient implements AnalysisClient { limitations: inventory.limitations, locations, }); - const result = createArtifactInspection(inventoryEvidence, parsed); + const result = createArtifactInspection(inventoryEvidence); await options?.progress?.report({ phase: "inspect_artifact.inventory", completed: 1, @@ -248,36 +234,16 @@ class ArtifactClient implements AnalysisClient { private inventory( parsed: { - readonly node_offset: number; - readonly node_limit: number; - readonly occurrence_offset: number; - readonly occurrence_limit: number; - readonly edge_offset: number; - readonly edge_limit: number; readonly native_mount_approved: boolean; readonly integrity_policy: "fail" | "record-and-continue"; readonly integrity_continue_approved: boolean; readonly max_integrity_mismatches: number; - readonly max_entries: number; - readonly max_total_bytes: number; - readonly max_entry_bytes: number; - readonly max_compression_ratio: number; - readonly max_depth: number; - readonly max_path_bytes: number; }, options?: ExecutionOptions, ) { - return inventoryArtifact( + return inventoryArtifactFully( this.target.sourcePath ?? this.target.path, - limitsFrom(parsed), - { - nodeOffset: parsed.node_offset, - nodeLimit: parsed.node_limit, - occurrenceOffset: parsed.occurrence_offset, - occurrenceLimit: parsed.occurrence_limit, - edgeOffset: parsed.edge_offset, - edgeLimit: parsed.edge_limit, - }, + DEFAULT_ARTIFACT_LIMITS, { ...(options?.signal === undefined ? {} : { signal: options.signal }), nativeMount: resolveNativeMountPolicy( @@ -298,21 +264,14 @@ class ArtifactClient implements AnalysisClient { } } -const limitsFrom = (input: { - readonly max_entries: number; - readonly max_total_bytes: number; - readonly max_entry_bytes: number; - readonly max_compression_ratio: number; - readonly max_depth: number; - readonly max_path_bytes: number; -}): ArtifactLimits => ({ - maxEntries: input.max_entries, - maxTotalBytes: input.max_total_bytes, - maxEntryBytes: input.max_entry_bytes, - maxCompressionRatio: input.max_compression_ratio, - maxDepth: input.max_depth, - maxPathBytes: input.max_path_bytes, -}); +const DEFAULT_ARTIFACT_LIMITS: ArtifactLimits = { + maxEntries: 10_000, + maxTotalBytes: 1_073_741_824, + maxEntryBytes: 268_435_456, + maxCompressionRatio: 1_000, + maxDepth: 20, + maxPathBytes: 4_096, +}; const isArtifactOperation = ( operation: AnalysisOperation, diff --git a/src/browser/BrowserScenario.test.ts b/src/browser/BrowserScenario.test.ts index 50e300261e..7f9f6d35da 100644 --- a/src/browser/BrowserScenario.test.ts +++ b/src/browser/BrowserScenario.test.ts @@ -11,7 +11,6 @@ const literal = (value: string) => ({ }); const baseScenario = () => ({ - schema_version: 1, browser: { mode: "launch", executable_path: "/opt/chromium/chrome", diff --git a/src/browser/CdpBrowserProvider.ts b/src/browser/CdpBrowserProvider.ts index 5c2356cf1e..500cd5e473 100644 --- a/src/browser/CdpBrowserProvider.ts +++ b/src/browser/CdpBrowserProvider.ts @@ -92,24 +92,10 @@ export class CdpBrowserProvider implements BrowserObservationPort { ); const allowedOrigins = new Set(input.allowed_origins); const selected = selectTargets(discovery, allowedOrigins); - const items = selected.allowed.slice( - input.offset, - input.offset + input.limit, - ); - const nextOffset = input.offset + items.length; return ok( browserTargetListSchema.parse({ - schema_version: 1, browser: discovery.version, - targets: { - items, - offset: input.offset, - limit: input.limit, - total: selected.allowed.length, - next_offset: - nextOffset < selected.allowed.length ? nextOffset : null, - has_more: nextOffset < selected.allowed.length, - }, + targets: selected.allowed, excluded: selected.excluded, limitations: [ "Only page targets whose current URL matches an approved exact origin are listed.", @@ -352,7 +338,7 @@ const selectTargets = ( discovery: CdpEndpointDiscovery, allowedOrigins: ReadonlySet, ): { - readonly allowed: readonly BrowserTargetList["targets"]["items"][number][]; + readonly allowed: readonly BrowserTargetList["targets"][number][]; readonly excluded: BrowserTargetList["excluded"]; readonly unconnectable: number; } => { diff --git a/src/browser/CdpElectronInspection.ts b/src/browser/CdpElectronInspection.ts index e921b47d00..266a93b8b3 100644 --- a/src/browser/CdpElectronInspection.ts +++ b/src/browser/CdpElectronInspection.ts @@ -113,7 +113,6 @@ const runElectronInspection = async ( await assertStableMainFrame(context, state, main.file_path); await report(context.progress, 3, "Electron inspection complete"); return { - schema_version: 1, browser: context.discovery.version, target: { target_id: context.target.id, diff --git a/src/browser/CdpElectronProvider.ts b/src/browser/CdpElectronProvider.ts index 1c2b9e3e40..b66d1a58f2 100644 --- a/src/browser/CdpElectronProvider.ts +++ b/src/browser/CdpElectronProvider.ts @@ -90,20 +90,10 @@ export class CdpElectronProvider implements ElectronObservationPort { allowed.sort((left, right) => left.target_id.localeCompare(right.target_id), ); - const items = allowed.slice(input.offset, input.offset + input.limit); - const next = input.offset + items.length; return ok( electronTargetListSchema.parse({ - schema_version: 1, browser: discovery.version, - targets: { - items, - offset: input.offset, - limit: input.limit, - total: allowed.length, - next_offset: next < allowed.length ? next : null, - has_more: next < allowed.length, - }, + targets: allowed, excluded: { outside_root: outsideRoot, unsupported_url: unsupportedUrl, diff --git a/src/browser/CdpObservationSession.ts b/src/browser/CdpObservationSession.ts index 4a2ff93589..1a072cd537 100644 --- a/src/browser/CdpObservationSession.ts +++ b/src/browser/CdpObservationSession.ts @@ -107,7 +107,6 @@ export const observeCdpSession = async ( terminal: true, }); return { - schema_version: 1, browser: context.discovery.version, target: { target_id: context.target.id, diff --git a/src/browser/CdpPageCapture.ts b/src/browser/CdpPageCapture.ts index 6c3809b9e5..9ded68c627 100644 --- a/src/browser/CdpPageCapture.ts +++ b/src/browser/CdpPageCapture.ts @@ -255,7 +255,6 @@ const normalizedInspection = ( state: CaptureState, captured: CapturedSections, ): WebPageInspection => ({ - schema_version: 2, browser: state.context.discovery.version, target: normalizedTarget( state.context.target, diff --git a/src/browser/CdpScreenshot.ts b/src/browser/CdpScreenshot.ts index f2cdb9c9f5..43f47b569f 100644 --- a/src/browser/CdpScreenshot.ts +++ b/src/browser/CdpScreenshot.ts @@ -106,7 +106,6 @@ export const captureCdpScreenshot = async ( terminal: true, }); return { - schema_version: 1, browser: context.discovery.version, target: { target_id: context.target.id, diff --git a/src/browser/CdpWebMcpDiscovery.ts b/src/browser/CdpWebMcpDiscovery.ts index 2fb70c9314..53626d4e5a 100644 --- a/src/browser/CdpWebMcpDiscovery.ts +++ b/src/browser/CdpWebMcpDiscovery.ts @@ -374,7 +374,6 @@ const buildWebMcpResult = (options: WebMcpResultOptions): WebMcpDiscovery => { new Set(context.input.allowed_origins), ); return { - schema_version: 1, browser: context.discovery.version, target: { target_id: context.target.id, diff --git a/src/browser/PlaywrightBrowserScenarioProvider.test.ts b/src/browser/PlaywrightBrowserScenarioProvider.test.ts index 06a076f53b..188dcf1753 100644 --- a/src/browser/PlaywrightBrowserScenarioProvider.test.ts +++ b/src/browser/PlaywrightBrowserScenarioProvider.test.ts @@ -40,7 +40,6 @@ const scenario = ( } = {}, ): BrowserScenario => browserScenarioSchema.parse({ - schema_version: 1, browser: options.mode === "connect" ? { diff --git a/src/browser/PlaywrightBrowserScenarioProvider.ts b/src/browser/PlaywrightBrowserScenarioProvider.ts index a1320cf1dc..05a9528315 100644 --- a/src/browser/PlaywrightBrowserScenarioProvider.ts +++ b/src/browser/PlaywrightBrowserScenarioProvider.ts @@ -317,7 +317,6 @@ const runScenario = async ( const events = session.events(); const completeness = globalCompleteness(scenario, session, steps); return browserScenarioCaptureSchema.parse({ - schema_version: 1, browser: { mode: session.mode, process_ownership: session.processOwnership, diff --git a/src/browser/PlaywrightElectronActiveActions.test.ts b/src/browser/PlaywrightElectronActiveActions.test.ts index b3e598ab25..ce9bce7b9d 100644 --- a/src/browser/PlaywrightElectronActiveActions.test.ts +++ b/src/browser/PlaywrightElectronActiveActions.test.ts @@ -9,7 +9,6 @@ import { runElectronActions } from "./PlaywrightElectronActiveActions.js"; it("parses bounded window, renderer, and deep-link actions for agents", () => { const input = electronActiveObservationInputSchema.parse({ - schema_version: 1, executable_path: "/opt/electron", application_path: "/opt/app/main.js", application_root: "/opt/app", @@ -47,7 +46,6 @@ it("parses bounded window, renderer, and deep-link actions for agents", () => { it("rejects non-absolute deep-link values", () => { const result = electronActiveObservationInputSchema.safeParse({ - schema_version: 1, executable_path: "/opt/electron", application_path: "/opt/app/main.js", application_root: "/opt/app", @@ -68,7 +66,6 @@ it("rejects non-absolute deep-link values", () => { it("redacts action inputs from Playwright failures", async () => { const selector = "#secret-selector"; const input = electronActiveObservationInputSchema.parse({ - schema_version: 1, executable_path: "/opt/electron", application_path: "/opt/app/main.js", application_root: "/opt/app", @@ -103,7 +100,6 @@ it("redacts action inputs from Playwright failures", async () => { it("runs an untargeted deep-link without requiring a BrowserWindow", async () => { const input = electronActiveObservationInputSchema.parse({ - schema_version: 1, executable_path: "/opt/electron", application_path: "/opt/app/main.js", application_root: "/opt/app", diff --git a/src/browser/PlaywrightElectronActiveProvider.ts b/src/browser/PlaywrightElectronActiveProvider.ts index 8bc3104b3c..4e16b6e4cd 100644 --- a/src/browser/PlaywrightElectronActiveProvider.ts +++ b/src/browser/PlaywrightElectronActiveProvider.ts @@ -327,7 +327,6 @@ const createResult = ( ipcEventKinds.has(kind), ); return electronActiveObservationResultSchema.parse({ - schema_version: 1, application: { executable_path: paths.executable, application_path: paths.application, diff --git a/src/browser/PlaywrightScenarioEvents.test.ts b/src/browser/PlaywrightScenarioEvents.test.ts index 4c2e3f5d20..6279f64e15 100644 --- a/src/browser/PlaywrightScenarioEvents.test.ts +++ b/src/browser/PlaywrightScenarioEvents.test.ts @@ -16,7 +16,6 @@ describe("PlaywrightScenarioEvents", () => { }, } as unknown as Page; const scenario = browserScenarioSchema.parse({ - schema_version: 1, browser: { mode: "launch", executable_path: "/opt/chromium", diff --git a/src/browser/PngVisualDiff.ts b/src/browser/PngVisualDiff.ts index 5b01812d17..8b16891875 100644 --- a/src/browser/PngVisualDiff.ts +++ b/src/browser/PngVisualDiff.ts @@ -21,7 +21,6 @@ export const comparePngScreenshots = ( const after = decodePng(input.after, input.maximum_pixels); if (before.width !== after.width || before.height !== after.height) return { - schema_version: 1, status: "dimension_mismatch", before: dimensions(before), after: dimensions(after), @@ -51,7 +50,6 @@ export const comparePngScreenshots = ( } const pixels = before.width * before.height; const context = { - schema_version: 1 as const, before: dimensions(before), after: dimensions(after), channel_threshold: input.channel_threshold, diff --git a/src/browser/V8InspectorCaptureProjection.ts b/src/browser/V8InspectorCaptureProjection.ts index 4064dff1b2..2ec33bdb87 100644 --- a/src/browser/V8InspectorCaptureProjection.ts +++ b/src/browser/V8InspectorCaptureProjection.ts @@ -90,7 +90,6 @@ export const finalizeInspectorCapture = async ({ : 0, ); return { - schema_version: 1, runtime, target: { target_id: target.id, diff --git a/src/browser/V8InspectorProvider.ts b/src/browser/V8InspectorProvider.ts index 0d83b356aa..d8c700846a 100644 --- a/src/browser/V8InspectorProvider.ts +++ b/src/browser/V8InspectorProvider.ts @@ -114,22 +114,10 @@ export class V8InspectorProvider implements JavaScriptRuntimeObservationPort { allowed.sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0, ); - const items = allowed - .slice(input.offset, input.offset + input.limit) - .map(projectTarget); - const nextOffset = input.offset + items.length; return ok( javascriptRuntimeTargetListSchema.parse({ - schema_version: 1, runtime: discovery.runtime, - targets: { - items, - offset: input.offset, - limit: input.limit, - total: allowed.length, - next_offset: nextOffset < allowed.length ? nextOffset : null, - has_more: nextOffset < allowed.length, - }, + targets: allowed.map(projectTarget), excluded: { ...excluded, unconnectable: 0 }, limitations: describeInspectorTargetLimitations(), }), diff --git a/src/catalogIdentity.ts b/src/catalogIdentity.ts index 46d959de08..f7789d6eaf 100644 --- a/src/catalogIdentity.ts +++ b/src/catalogIdentity.ts @@ -38,56 +38,6 @@ const promptCatalog = PROMPT_CONTRACTS.map((contract) => ({ steps: contract.steps, })).sort((left, right) => left.name.localeCompare(right.name)); -/** Canonical fixed resources exposed by every target-free MCP session. */ -export const MCP_RESOURCE_CATALOG = [ - { name: "server-identity", uri: "rea://server/identity" }, - { name: "analysis-snapshot", uri: "rea://snapshot/current" }, -] as const; -/** Canonical resource templates exposed by every target-free MCP session. */ -export const MCP_RESOURCE_TEMPLATE_CATALOG = [ - { name: "session-evidence", uri_template: "rea://evidence/{evidenceId}" }, - { - name: "evidence-section", - uri_template: "rea://evidence/{evidenceId}/section/{section}", - }, - { name: "residual-unknown", uri_template: "rea://unknown/{unknownId}" }, - { - name: "evidence-bundle", - uri_template: "rea://evidence-bundle/{bundleDigest}", - }, - { - name: "artifact-page", - uri_template: "rea://artifact/{manifestId}/{collection}", - }, - { - name: "function-dossier", - uri_template: "rea://function/{targetSha256}/{address}", - }, - { - name: "investigation-workspace-revision", - uri_template: "rea://workspace/{workspaceId}/revision/{revision}", - }, - { - name: "reconstruction-coverage-revision", - uri_template: - "rea://reconstruction-coverage/{workspaceId}/revision/{revision}", - }, - { - name: "reconstruction-obligation-ledger-page", - uri_template: - "rea://evidence/{evidenceId}/reconstruction-obligation-ledger", - }, - { - name: "reconstruction-readiness-report", - uri_template: "rea://evidence/{evidenceId}/reconstruction-readiness-report", - }, - { - name: "javascript-application-graph-page", - uri_template: - "rea://evidence/{evidenceId}/application-graph/{collection}/offset/{offset}/limit/{limit}", - }, -] as const; - const digest = (value: unknown): string => { const encoded = canonicalize(value); if (encoded === undefined) @@ -101,22 +51,14 @@ export const CATALOG_IDENTITY = { cli_commands: CLI_COMMAND_NAMES.length, mcp_tools: toolCatalog.length, mcp_prompts: promptCatalog.length, - mcp_resources: MCP_RESOURCE_CATALOG.length, - mcp_resource_templates: MCP_RESOURCE_TEMPLATE_CATALOG.length, }, digests: { tools_sha256: digest(toolCatalog), prompts_sha256: digest(promptCatalog), - resources_sha256: digest({ - resourceCatalog: MCP_RESOURCE_CATALOG, - resourceTemplateCatalog: MCP_RESOURCE_TEMPLATE_CATALOG, - }), combined_sha256: digest({ cli: CLI_COMMAND_NAMES, tools: toolCatalog, prompts: promptCatalog, - resources: MCP_RESOURCE_CATALOG, - resource_templates: MCP_RESOURCE_TEMPLATE_CATALOG, }), }, tools: toolCatalog.map(({ name, surface, effects, annotations }) => ({ diff --git a/src/cli/artifactCommands.ts b/src/cli/artifactCommands.ts index ba8f4b55cc..a0c4af082f 100644 --- a/src/cli/artifactCommands.ts +++ b/src/cli/artifactCommands.ts @@ -17,24 +17,11 @@ export const registerArtifactCommands = ( const registerInventoryCommand = (cli: CliInstance, logger: Logger): void => { cli.command(CLI_COMMANDS.inventoryArtifact, { - description: "Build a bounded deterministic artifact graph", + description: "Build a complete deterministic artifact graph", args: z.object({ path: z.string().describe("Application or package path"), }), options: z.object({ - offset: z - .number() - .int() - .min(0) - .default(0) - .describe("Zero-based offset for graph nodes, occurrences, and edges"), - limit: z - .number() - .int() - .min(1) - .max(500) - .default(100) - .describe("Maximum nodes, occurrences, and edges per result section"), integrityPolicy: z .enum(["fail", "record-and-continue"]) .default("fail") @@ -67,12 +54,6 @@ const registerInventoryCommand = (cli: CliInstance, logger: Logger): void => { args.path, "inventory_artifact", { - node_offset: options.offset, - node_limit: options.limit, - occurrence_offset: options.offset, - occurrence_limit: options.limit, - edge_offset: options.offset, - edge_limit: options.limit, integrity_policy: options.integrityPolicy, integrity_continue_approved: options.integrityContinueApproved, max_integrity_mismatches: options.maxIntegrityMismatches, @@ -118,41 +99,14 @@ const registerExtractionCommand = (cli: CliInstance, logger: Logger): void => { const registerInspectionCommand = (cli: CliInstance, logger: Logger): void => { cli.command(CLI_COMMANDS.inspectArtifact, { description: - "Inspect one artifact with bounded observations and explicit next probes", + "Inspect one artifact and return all available observations and next probes", args: z.object({ path: z.string().describe("Application or package path"), }), - options: z.object({ - maxObservations: z - .number() - .int() - .min(1) - .max(500) - .default(100) - .describe("Maximum retained observations"), - maxRelationships: z - .number() - .int() - .min(1) - .max(500) - .default(100) - .describe("Maximum retained derived relationships"), - }), - alias: { - maxObservations: "max-observations", - maxRelationships: "max-relationships", - }, - run: ({ args, options }) => + options: z.object({}), + run: ({ args }) => logCliCommand(logger, "inspect-artifact", () => - runProviderAnalysis( - args.path, - "inspect_artifact", - { - max_observations: options.maxObservations, - max_relationships: options.maxRelationships, - }, - logger, - ), + runProviderAnalysis(args.path, "inspect_artifact", {}, logger), ), }); }; diff --git a/src/cli/coreAnalysisCommands.ts b/src/cli/coreAnalysisCommands.ts index c2748ef2ee..16f5f85e3e 100644 --- a/src/cli/coreAnalysisCommands.ts +++ b/src/cli/coreAnalysisCommands.ts @@ -25,17 +25,6 @@ export const registerCoreAnalysisCommands = ( const registerCoreCommands = (cli: CliInstance, logger: Logger): void => { const overviewOptions = z.object({ - detail: z - .enum(["concise", "detailed"]) - .default("concise") - .describe("Overview detail level"), - limit: z - .number() - .int() - .min(1) - .max(50) - .default(10) - .describe("Maximum overview items to return"), snapshot: z .string() .min(1) @@ -43,20 +32,12 @@ const registerCoreCommands = (cli: CliInstance, logger: Logger): void => { .describe("Load and update a local analysis snapshot"), provider: providerSelectionOption, }); - const analyzeOptions = overviewOptions.extend({ - approved: z - .boolean() - .default(false) - .describe( - "Approve static analysis when the path is a JavaScript directory or ASAR", - ), - }); cli.command(CLI_COMMANDS.analyze, { description: "Get an overview of an app", args: z.object({ path: z.string().describe("App, program, or analysis database path"), }), - options: analyzeOptions, + options: overviewOptions, run: ({ args, options }) => logCliCommand(logger, "analyze", () => runRoutedOverview(args.path, options, logger), @@ -73,7 +54,7 @@ const registerCoreCommands = (cli: CliInstance, logger: Logger): void => { runDirectAnalysis( args.path, "binary_overview", - { detail: options.detail, limit: options.limit }, + {}, directAnalysisOptions(logger, options.snapshot, options.provider), ), ), @@ -107,9 +88,6 @@ const registerCoreCommands = (cli: CliInstance, logger: Logger): void => { const runRoutedOverview = async ( path: string, options: { - readonly approved: boolean; - readonly detail: "concise" | "detailed"; - readonly limit: number; readonly snapshot?: string | undefined; readonly provider?: string | undefined; }, @@ -122,12 +100,11 @@ const runRoutedOverview = async ( ) return runCliJavaScriptApplicationAnalysis({ input_path: resolve(path), - approved: options.approved, }); return runDirectAnalysis( path, "binary_overview", - { detail: options.detail, limit: options.limit }, + {}, directAnalysisOptions(logger, options.snapshot, options.provider), ); }; @@ -172,7 +149,7 @@ const registerXrefsCommand = (cli: CliInstance, logger: Logger): void => { const registerTraceCommand = (cli: CliInstance, logger: Logger): void => { cli.command(CLI_COMMANDS.trace, { - description: "Trace a bounded literal feature through analyzed references", + description: "Trace a literal feature through analyzed references", args: z.object({ path: z.string().describe("App or program path"), query: z.string().min(1).describe("Literal feature query"), @@ -186,16 +163,8 @@ const registerTraceCommand = (cli: CliInstance, logger: Logger): void => { .number() .int() .min(1) - .max(100) - .default(20) - .describe("Maximum matching roots to examine"), - maxOperations: z - .number() - .int() - .min(1) - .max(100) - .default(20) - .describe("Maximum analysis operations in the trace"), + .default(10_000) + .describe("Maximum matching results to return"), snapshot: z .string() .min(1) @@ -205,7 +174,6 @@ const registerTraceCommand = (cli: CliInstance, logger: Logger): void => { }), alias: { caseSensitive: "case-sensitive", - maxOperations: "max-operations", }, run: ({ args, options }) => logCliCommand(logger, "trace", () => @@ -216,7 +184,6 @@ const registerTraceCommand = (cli: CliInstance, logger: Logger): void => { query: args.query, case_sensitive: options.caseSensitive, limit: options.limit, - max_operations: options.maxOperations, }, directAnalysisOptions(logger, options.snapshot, options.provider), ), @@ -226,37 +193,12 @@ const registerTraceCommand = (cli: CliInstance, logger: Logger): void => { const registerFunctionCommand = (cli: CliInstance, logger: Logger): void => { cli.command(CLI_COMMANDS.function, { - description: "Analyze one bounded function with evidence", + description: "Analyze one complete function with evidence", args: z.object({ path: z.string().describe("App or program path"), address: z.string().describe("Procedure name or address"), }), options: z.object({ - includeAssembly: z - .boolean() - .default(false) - .describe("Include bounded assembly instructions"), - limit: z - .number() - .int() - .min(1) - .max(500) - .default(100) - .describe("Maximum referenced items to return"), - maxPseudocodeChars: z - .number() - .int() - .min(1) - .max(100_000) - .default(20_000) - .describe("Maximum pseudocode characters to return"), - maxInstructions: z - .number() - .int() - .min(1) - .max(5_000) - .default(500) - .describe("Maximum assembly instructions to return"), snapshot: z .string() .min(1) @@ -264,23 +206,12 @@ const registerFunctionCommand = (cli: CliInstance, logger: Logger): void => { .describe("Load and update a local analysis snapshot"), provider: providerSelectionOption, }), - alias: { - includeAssembly: "include-assembly", - maxPseudocodeChars: "max-pseudocode-chars", - maxInstructions: "max-instructions", - }, run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis( args.path, "analyze_function", - { - procedure: args.address, - include_assembly: options.includeAssembly, - limit: options.limit, - max_pseudocode_chars: options.maxPseudocodeChars, - max_instructions: options.maxInstructions, - }, + { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider), ), ), @@ -295,20 +226,6 @@ const registerNativeApiCommand = (cli: CliInstance, logger: Logger): void => { address: z.string().describe("Procedure name or address"), }), options: z.object({ - maxPseudocodeChars: z - .number() - .int() - .min(1) - .max(100_000) - .default(20_000) - .describe("Maximum pseudocode characters to inspect"), - maxInstructions: z - .number() - .int() - .min(1) - .max(5_000) - .default(500) - .describe("Maximum assembly instructions to inspect"), snapshot: z .string() .min(1) @@ -316,20 +233,12 @@ const registerNativeApiCommand = (cli: CliInstance, logger: Logger): void => { .describe("Load and update a local analysis snapshot"), provider: providerSelectionOption, }), - alias: { - maxPseudocodeChars: "max-pseudocode-chars", - maxInstructions: "max-instructions", - }, run: ({ args, options }) => logCliCommand(logger, "inspect-native-api", () => runDirectAnalysis( args.path, "inspect_native_api", - { - procedure: args.address, - max_pseudocode_chars: options.maxPseudocodeChars, - max_instructions: options.maxInstructions, - }, + { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider), ), ), @@ -386,7 +295,7 @@ const registerInstructionsCommand = ( const registerSearchCommand = (cli: CliInstance, logger: Logger): void => { cli.command(CLI_COMMANDS.search, { - description: "Search bounded analyzed strings or procedure names", + description: "Search analyzed strings or procedure names", args: z.object({ path: z.string().describe("App or program path"), pattern: z.string().min(1).describe("Literal text or regex pattern"), diff --git a/src/cli/javascriptApplicationAnalysis.ts b/src/cli/javascriptApplicationAnalysis.ts index c6b9f299bd..baf861db60 100644 --- a/src/cli/javascriptApplicationAnalysis.ts +++ b/src/cli/javascriptApplicationAnalysis.ts @@ -1,6 +1,4 @@ import { analyzeJavaScriptApplication } from "../application/JavaScriptApplicationService.js"; -import { loadConfiguredPermissionAuthority } from "../application/PermissionConfiguration.js"; -import { parseConfig } from "../config.js"; import { projectAnalysisError } from "../domain/errors.js"; import type { JsonValue } from "../domain/jsonValue.js"; @@ -8,11 +6,7 @@ import type { JsonValue } from "../domain/jsonValue.js"; export const runCliJavaScriptApplicationAnalysis = async ( input: unknown, ): Promise => { - const config = parseConfig(process.env); - if (!config.ok) return cliError(config.error); - const authority = await loadConfiguredPermissionAuthority(config.value); - if (!authority.ok) return cliError(authority.error); - const result = await analyzeJavaScriptApplication(authority.value, input); + const result = await analyzeJavaScriptApplication(input); return result.ok ? result.value : cliError(result.error); }; diff --git a/src/cli/managedCommands.ts b/src/cli/managedCommands.ts index fb0506a88b..458fc8a6ab 100644 --- a/src/cli/managedCommands.ts +++ b/src/cli/managedCommands.ts @@ -1,9 +1,6 @@ import { z } from "incur"; -import { - compareManagedMemberPaths, - type ManagedMemberPathInspectionLimits, -} from "../application/ManagedMemberComparisonService.js"; +import { compareManagedMemberPaths } from "../application/ManagedMemberComparisonService.js"; import { verifyManagedNativeBoundariesEvidence } from "../application/ManagedNativeVerificationService.js"; import { importManagedReconstructionEvidence } from "../application/ManagedReconstructionService.js"; import { planManagedRuntimeCorrelationEvidence } from "../application/ManagedRuntimeCorrelationService.js"; @@ -18,49 +15,6 @@ import type { Logger } from "../logger.js"; import type { CliInstance } from "./types.js"; import { registerProjectManagedApplicationGraph } from "./managedProjectGraphCommand.js"; -const managedOffset = (subject: string) => - z.number().int().min(0).default(0).describe(`Zero-based ${subject} offset`); - -const managedLimit = (subject: string, maximum: number, fallback: number) => - z - .number() - .int() - .min(1) - .max(maximum) - .default(fallback) - .describe(`Maximum ${subject} to return`); - -const managedInspectionLimits = { - maxFileBytes: z - .number() - .int() - .min(4_096) - .max(1_073_741_824) - .default(268_435_456) - .describe("Maximum managed artifact file size accepted for inspection"), - maxMetadataBytes: z - .number() - .int() - .min(256) - .max(268_435_456) - .default(67_108_864) - .describe("Maximum CLI metadata region size accepted for inspection"), - maxTableRows: z - .number() - .int() - .min(1) - .max(1_000_000) - .default(100_000) - .describe("Maximum rows accepted in any CLI metadata table"), - maxHeapItemBytes: z - .number() - .int() - .min(1) - .max(16_777_216) - .default(1_048_576) - .describe("Maximum bytes accepted for one CLI metadata heap item"), -}; - export const registerManagedCommands = ( cli: CliInstance, logger: Logger, @@ -84,46 +38,9 @@ const registerInspectManagedArtifact = ( args: z.object({ path: z.string().describe("Managed PE executable or assembly path"), }), - options: z.object({ - referenceOffset: managedOffset("assembly-reference"), - referenceLimit: managedLimit("assembly references", 500, 100), - resourceOffset: managedOffset("manifest-resource"), - resourceLimit: managedLimit("manifest resources", 500, 100), - attributeOffset: managedOffset("assembly-attribute"), - attributeLimit: managedLimit("assembly attributes", 500, 100), - ...managedInspectionLimits, - }), - alias: { - referenceOffset: "reference-offset", - referenceLimit: "reference-limit", - resourceOffset: "resource-offset", - resourceLimit: "resource-limit", - attributeOffset: "attribute-offset", - attributeLimit: "attribute-limit", - maxFileBytes: "max-file-bytes", - maxMetadataBytes: "max-metadata-bytes", - maxTableRows: "max-table-rows", - maxHeapItemBytes: "max-heap-item-bytes", - }, - run: ({ args, options }) => + run: ({ args }) => logCliCommand(logger, "inspect-managed-artifact", () => - runProviderAnalysis( - args.path, - "inspect_managed_artifact", - { - reference_offset: options.referenceOffset, - reference_limit: options.referenceLimit, - resource_offset: options.resourceOffset, - resource_limit: options.resourceLimit, - attribute_offset: options.attributeOffset, - attribute_limit: options.attributeLimit, - max_file_bytes: options.maxFileBytes, - max_metadata_bytes: options.maxMetadataBytes, - max_table_rows: options.maxTableRows, - max_heap_item_bytes: options.maxHeapItemBytes, - }, - logger, - ), + runProviderAnalysis(args.path, "inspect_managed_artifact", {}, logger), ), }); }; @@ -138,85 +55,9 @@ const registerInspectManagedMembers = ( args: z.object({ path: z.string().describe("Managed PE executable or assembly path"), }), - options: z.object({ - typeOffset: managedOffset("type definition"), - typeLimit: managedLimit("type definitions", 500, 100), - methodOffset: managedOffset("method definition"), - methodLimit: managedLimit("method definitions", 500, 100), - fieldOffset: managedOffset("field definition"), - fieldLimit: managedLimit("field definitions", 500, 100), - memberRefOffset: managedOffset("member reference"), - memberRefLimit: managedLimit("member references", 500, 100), - edgeOffset: managedOffset("member edge"), - edgeLimit: managedLimit("member edges", 1_000, 250), - instructionAnchorLimit: z - .number() - .int() - .min(0) - .max(500) - .default(100) - .describe("Maximum CIL instruction anchors per method"), - ...managedInspectionLimits, - maxMethodBodyBytes: z - .number() - .int() - .min(1) - .max(16_777_216) - .default(1_048_576) - .describe("Maximum CIL method body size accepted for inspection"), - maxMethodInstructions: z - .number() - .int() - .min(1) - .max(100_000) - .default(10_000) - .describe("Maximum decoded CIL instructions per method"), - }), - alias: { - typeOffset: "type-offset", - typeLimit: "type-limit", - methodOffset: "method-offset", - methodLimit: "method-limit", - fieldOffset: "field-offset", - fieldLimit: "field-limit", - memberRefOffset: "member-ref-offset", - memberRefLimit: "member-ref-limit", - edgeOffset: "edge-offset", - edgeLimit: "edge-limit", - instructionAnchorLimit: "instruction-anchor-limit", - maxFileBytes: "max-file-bytes", - maxMetadataBytes: "max-metadata-bytes", - maxTableRows: "max-table-rows", - maxHeapItemBytes: "max-heap-item-bytes", - maxMethodBodyBytes: "max-method-body-bytes", - maxMethodInstructions: "max-method-instructions", - }, - run: ({ args, options }) => + run: ({ args }) => logCliCommand(logger, "inspect-managed-members", () => - runProviderAnalysis( - args.path, - "inspect_managed_members", - { - type_offset: options.typeOffset, - type_limit: options.typeLimit, - method_offset: options.methodOffset, - method_limit: options.methodLimit, - field_offset: options.fieldOffset, - field_limit: options.fieldLimit, - member_ref_offset: options.memberRefOffset, - member_ref_limit: options.memberRefLimit, - edge_offset: options.edgeOffset, - edge_limit: options.edgeLimit, - instruction_anchor_limit: options.instructionAnchorLimit, - max_file_bytes: options.maxFileBytes, - max_metadata_bytes: options.maxMetadataBytes, - max_table_rows: options.maxTableRows, - max_heap_item_bytes: options.maxHeapItemBytes, - max_method_body_bytes: options.maxMethodBodyBytes, - max_method_instructions: options.maxMethodInstructions, - }, - logger, - ), + runProviderAnalysis(args.path, "inspect_managed_members", {}, logger), ), }); }; @@ -231,44 +72,12 @@ const registerInspectManagedNativeBoundaries = ( args: z.object({ path: z.string().describe("Managed PE executable or assembly path"), }), - options: z.object({ - moduleRefOffset: managedOffset("module reference"), - moduleRefLimit: managedLimit("module references", 500, 100), - importOffset: managedOffset("platform import"), - importLimit: managedLimit("platform imports", 500, 100), - implementationOffset: managedOffset("native implementation"), - implementationLimit: managedLimit("native implementations", 500, 100), - ...managedInspectionLimits, - }), - alias: { - moduleRefOffset: "module-ref-offset", - moduleRefLimit: "module-ref-limit", - importOffset: "import-offset", - importLimit: "import-limit", - implementationOffset: "implementation-offset", - implementationLimit: "implementation-limit", - maxFileBytes: "max-file-bytes", - maxMetadataBytes: "max-metadata-bytes", - maxTableRows: "max-table-rows", - maxHeapItemBytes: "max-heap-item-bytes", - }, - run: ({ args, options }) => + run: ({ args }) => logCliCommand(logger, "inspect-managed-native-boundaries", () => runProviderAnalysis( args.path, "inspect_managed_native_boundaries", - { - module_ref_offset: options.moduleRefOffset, - module_ref_limit: options.moduleRefLimit, - import_offset: options.importOffset, - import_limit: options.importLimit, - implementation_offset: options.implementationOffset, - implementation_limit: options.implementationLimit, - max_file_bytes: options.maxFileBytes, - max_metadata_bytes: options.maxMetadataBytes, - max_table_rows: options.maxTableRows, - max_heap_item_bytes: options.maxHeapItemBytes, - }, + {}, logger, ), ), @@ -288,84 +97,11 @@ const registerCompareManagedMembers = ( description: "Compare two managed PE/CLI member inventories without name-based matching", args: compareManagedMemberArgs, - options: z.object({ - maxMethodMatches: z - .number() - .int() - .min(1) - .max(50_000) - .default(10_000) - .describe("Maximum exact method matches to return"), - maxFieldMatches: z - .number() - .int() - .min(0) - .max(50_000) - .default(5_000) - .describe("Maximum exact field matches to return"), - maxCandidates: z - .number() - .int() - .min(1) - .max(500) - .default(50) - .describe("Maximum ambiguous candidates per unmatched member"), - typeLimit: managedLimit("type definitions per artifact", 500, 500), - methodLimit: managedLimit("method definitions per artifact", 500, 500), - fieldLimit: managedLimit("field definitions per artifact", 500, 500), - memberRefLimit: managedLimit("member references per artifact", 500, 500), - edgeLimit: managedLimit("member edges per artifact", 1_000, 1_000), - instructionAnchorLimit: z - .number() - .int() - .min(0) - .max(500) - .default(500) - .describe("Maximum CIL instruction anchors per compared method"), - ...managedInspectionLimits, - maxMethodBodyBytes: z - .number() - .int() - .min(1) - .max(16_777_216) - .default(1_048_576) - .describe("Maximum CIL method body size accepted for comparison"), - maxMethodInstructions: z - .number() - .int() - .min(1) - .max(100_000) - .default(100_000) - .describe("Maximum decoded CIL instructions per compared method"), - }), - alias: { - maxMethodMatches: "max-method-matches", - maxFieldMatches: "max-field-matches", - maxCandidates: "max-candidates", - typeLimit: "type-limit", - methodLimit: "method-limit", - fieldLimit: "field-limit", - memberRefLimit: "member-ref-limit", - edgeLimit: "edge-limit", - instructionAnchorLimit: "instruction-anchor-limit", - maxFileBytes: "max-file-bytes", - maxMetadataBytes: "max-metadata-bytes", - maxTableRows: "max-table-rows", - maxHeapItemBytes: "max-heap-item-bytes", - maxMethodBodyBytes: "max-method-body-bytes", - maxMethodInstructions: "max-method-instructions", - }, - run: ({ args, options }) => + run: ({ args }) => logCliCommand(logger, "compare-managed-members", async () => { const result = await compareManagedMemberPaths({ leftPath: args.leftPath, rightPath: args.rightPath, - comparisonLimits: { - max_method_matches: options.maxMethodMatches, - max_field_matches: options.maxFieldMatches, - max_candidates: options.maxCandidates, - }, - memberLimits: buildMemberLimits(options), }); return result.ok ? result.value @@ -377,43 +113,6 @@ const registerCompareManagedMembers = ( }); }; -interface ManagedMemberLimitOptions { - readonly maxFileBytes: number; - readonly typeLimit: number; - readonly methodLimit: number; - readonly fieldLimit: number; - readonly memberRefLimit: number; - readonly edgeLimit: number; - readonly instructionAnchorLimit: number; - readonly maxMetadataBytes: number; - readonly maxTableRows: number; - readonly maxHeapItemBytes: number; - readonly maxMethodBodyBytes: number; - readonly maxMethodInstructions: number; -} - -const buildMemberLimits = ( - options: ManagedMemberLimitOptions, -): ManagedMemberPathInspectionLimits => ({ - maxFileBytes: options.maxFileBytes, - typeOffset: 0, - typeLimit: options.typeLimit, - methodOffset: 0, - methodLimit: options.methodLimit, - fieldOffset: 0, - fieldLimit: options.fieldLimit, - memberRefOffset: 0, - memberRefLimit: options.memberRefLimit, - edgeOffset: 0, - edgeLimit: options.edgeLimit, - instructionAnchorLimit: options.instructionAnchorLimit, - maxMetadataBytes: options.maxMetadataBytes, - maxTableRows: options.maxTableRows, - maxHeapItemBytes: options.maxHeapItemBytes, - maxMethodBodyBytes: options.maxMethodBodyBytes, - maxMethodInstructions: options.maxMethodInstructions, -}); - const registerImportManagedReconstruction = ( cli: CliInstance, logger: Logger, diff --git a/src/cli/setupCommands.ts b/src/cli/setupCommands.ts index 299c88b7c0..876d256a44 100644 --- a/src/cli/setupCommands.ts +++ b/src/cli/setupCommands.ts @@ -13,7 +13,6 @@ import { import { runUninstall } from "../application/Uninstall.js"; import { runUpgrade, systemUpgradeHost } from "../application/Upgrade.js"; import { - conciseSetupResult, confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, @@ -25,7 +24,6 @@ import { CLI_COMMANDS } from "../cliCommandNames.js"; import type { Logger } from "../logger.js"; import type { CliInstance } from "./types.js"; import { SUPPORTED_CLIENT_DEFINITIONS } from "../application/SupportedClients.js"; -import { projectDoctorReport } from "../application/DoctorProjection.js"; const supportedClientIds = SUPPORTED_CLIENT_DEFINITIONS.map(({ name }) => name); const supportedClientSchema = z @@ -80,10 +78,6 @@ const registerSetupCommand = (cli: CliInstance, logger: Logger): void => { .boolean() .default(false) .describe("Use sequential accessible setup prompts"), - detail: z - .enum(["summary", "full"]) - .default("summary") - .describe("Summary or complete setup and doctor diagnostics"), }), alias: { yes: "y" }, run: ({ options, formatExplicit }) => @@ -110,10 +104,6 @@ const registerDoctorCommand = (cli: CliInstance, logger: Logger): void => { .boolean() .optional() .describe("Require the installed REA skill identity to be aligned"), - detail: z - .enum(["summary", "full"]) - .default("summary") - .describe("Summary or complete doctor diagnostics"), }), run: ({ options }) => logCliCommand(logger, "doctor", () => @@ -121,7 +111,7 @@ const registerDoctorCommand = (cli: CliInstance, logger: Logger): void => { options.target, createSystemDoctorHost(), doctorScope(options), - ).then((report) => projectDoctorReport(report, options.detail)), + ), ), }); }; @@ -163,7 +153,6 @@ interface SetupCommandOptions { readonly skill?: boolean | undefined; readonly dryRun: boolean; readonly accessible: boolean; - readonly detail: "summary" | "full"; } const runSetupCommand = async (input: { @@ -185,7 +174,7 @@ const runSetupCommand = async (input: { : undefined, ); if (interactive) renderInteractiveSetupResult(result); - return options.detail === "full" ? result : conciseSetupResult(result); + return result; }; const setupRunOptions = ( diff --git a/src/cli/utilityCommands.ts b/src/cli/utilityCommands.ts index bfb7a62255..b578d17faf 100644 --- a/src/cli/utilityCommands.ts +++ b/src/cli/utilityCommands.ts @@ -39,17 +39,11 @@ const registerCapabilityCommands = (cli: CliInstance, logger: Logger): void => { command === "capabilities" ? "List provider capabilities and side effects" : "List configured analysis providers", - options: z.object({ - detail: z - .enum(["summary", "full"]) - .default("summary") - .describe("Summary or complete provider descriptors"), - }), - run: ({ options }) => + run: () => logCliCommand(logger, command, () => command === CLI_COMMANDS.providers - ? runProviderStatus(logger, options.detail) - : runCapabilityStatus(logger, options.detail), + ? runProviderStatus(logger) + : runCapabilityStatus(logger), ), }); } diff --git a/src/cliBrowserCommands.ts b/src/cliBrowserCommands.ts index 32a33fedac..9dd25c3962 100644 --- a/src/cliBrowserCommands.ts +++ b/src/cliBrowserCommands.ts @@ -44,16 +44,7 @@ const registerTargetList = ( args: z.object({ endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"), }), - options: z.object({ - ...browserScopeOptions, - offset: z - .number() - .int() - .min(0) - .default(0) - .describe("Zero-based browser-target offset"), - limit: boundedCount("browser targets to return", 200, 100), - }), + options: z.object({ ...browserScopeOptions }), run: ({ args, options }) => logCliCommand(logger, "list-browser-targets", async () => { const context = await browserContext("list_browser_targets"); @@ -63,8 +54,6 @@ const registerTargetList = ( allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins, approved: options.approved, - offset: options.offset, - limit: options.limit, }); if (!parsed.success) return browserCliError( diff --git a/src/cliElectronCommands.ts b/src/cliElectronCommands.ts index 8df0a18214..0d8a5547bb 100644 --- a/src/cliElectronCommands.ts +++ b/src/cliElectronCommands.ts @@ -129,22 +129,7 @@ const registerElectronTargetList = ( .string() .describe("Configured loopback Electron CDP endpoint"), }), - options: z.object({ - ...electronScopeOptions, - offset: z - .number() - .int() - .min(0) - .default(0) - .describe("Zero-based Electron-target offset"), - limit: z - .number() - .int() - .min(1) - .max(200) - .default(100) - .describe("Maximum Electron targets to return"), - }), + options: z.object({ ...electronScopeOptions }), run: ({ args, options }) => logCliCommand(logger, "list-electron-targets", async () => { const context = await electronObservationContext( @@ -156,8 +141,6 @@ const registerElectronTargetList = ( allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots, approved: options.approved, - offset: options.offset, - limit: options.limit, }); if (!parsed.success) return inputError("list_electron_targets"); const result = await listElectronTargets( @@ -225,7 +208,7 @@ const registerJavaScriptApplicationCommand = ( ): void => { cli.command(CLI_COMMANDS.analyzeJavaScriptApplication, { description: - "Statically reconstruct an approved JavaScript/Electron application", + "Statically reconstruct a local JavaScript/Electron application", args: z.object({ path: z.string().describe("Absolute ASAR or extracted application path"), }), @@ -234,9 +217,7 @@ const registerJavaScriptApplicationCommand = ( logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({ input_path: args.path, - approved: options.approved, format: options.artifactFormat, - source_map_read_approved: options.sourceMapReadApproved, limits: { max_entries: options.maxEntries, max_total_artifact_bytes: options.maxTotalArtifactBytes, diff --git a/src/cliInvestigationCommands.ts b/src/cliInvestigationCommands.ts index c4bee2eace..9dc4c7a177 100644 --- a/src/cliInvestigationCommands.ts +++ b/src/cliInvestigationCommands.ts @@ -6,10 +6,7 @@ import { parseConfig } from "./config.js"; import { projectAnalysisError, type AnalysisError } from "./domain/errors.js"; import type { Logger } from "./logger.js"; import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js"; -import { - authorizeFileReadWithDeferredWrite, - authorizeRootPermission, -} from "./application/DeferredFileAuthorization.js"; +import { authorizeFileReadWithDeferredWrite } from "./application/DeferredFileAuthorization.js"; import { CLI_COMMANDS } from "./cliCommandNames.js"; const investigationOptionsSchema = z.object({ @@ -178,15 +175,7 @@ const runInvestigation = async ( }, config.value.evidenceFilePolicy, { - inputRoots: config.value.investigationInputRoots, integrityContinueEnabled: config.value.artifactIntegrityContinueEnabled, - authorizeInputRead: () => - authorizeRootPermission(authority.value, { - capability: "investigation_input", - roots: [args.leftPath, args.rightPath], - access: "read", - operation: "investigate_versions", - }), authorizeWorkspaceWrite: workspaceAuthorization.value.authorizeWrite, }, ); diff --git a/src/cliJavaScriptRuntimeCommands.ts b/src/cliJavaScriptRuntimeCommands.ts index 2edd032a4e..bbe3b997f2 100644 --- a/src/cliJavaScriptRuntimeCommands.ts +++ b/src/cliJavaScriptRuntimeCommands.ts @@ -37,22 +37,7 @@ const scopeOptions = { approved: z.boolean().default(false).describe("Approve passive attachment"), }; -const listOptionsSchema = z.object({ - ...scopeOptions, - offset: z - .number() - .int() - .min(0) - .default(0) - .describe("Zero-based target offset"), - limit: z - .number() - .int() - .min(1) - .max(200) - .default(100) - .describe("Maximum targets to return"), -}); +const listOptionsSchema = z.object({ ...scopeOptions }); const observeOptionsSchema = z.object({ ...scopeOptions, @@ -129,8 +114,6 @@ export const registerJavaScriptRuntimeObservationCommands = ( options.allowedFileRoots ?? context.allowedFileRoots, allowed_origins: options.allowedOrigins ?? context.allowedOrigins, approved: options.approved, - offset: options.offset, - limit: options.limit, }); if (!parsed.success) return inputError("list_javascript_runtime_targets"); diff --git a/src/cliObservationOptions.ts b/src/cliObservationOptions.ts index f45845ab07..b0337c5af5 100644 --- a/src/cliObservationOptions.ts +++ b/src/cliObservationOptions.ts @@ -195,20 +195,10 @@ export const electronPageInspectionOptions = z.object({ }); export const javascriptApplicationOptions = z.object({ - approved: z - .boolean() - .default(false) - .describe("Approve reading the application artifact"), artifactFormat: z .enum(["auto", "asar", "directory"]) .default("auto") .describe("Application artifact format"), - sourceMapReadApproved: z - .boolean() - .default(false) - .describe( - "Approve reading local source maps referenced by the application", - ), maxEntries: positiveCount("artifact entries to inspect", 8_000), maxTotalArtifactBytes: positiveCount( "total uncompressed artifact content to inspect", diff --git a/src/cliProcessCommands.ts b/src/cliProcessCommands.ts index 9e0a364659..ff99d19ac7 100644 --- a/src/cliProcessCommands.ts +++ b/src/cliProcessCommands.ts @@ -15,14 +15,14 @@ import { import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; import { projectInputIssues } from "./domain/inputIssueProjection.js"; -/** Register Process Capture v4 one-shot commands through shared application services. */ +/** Register process capture one-shot commands through shared application services. */ export const registerProcessCommands = ( cli: ReturnType, logger: Logger, ): void => { registerReplayMachineCommand(cli, logger); cli.command(CLI_COMMANDS.captureProcess, { - description: "Capture one approved Process Capture v4 JSON scenario", + description: "Capture one approved process capture JSON scenario", args: z.object({ scenario: z.string().describe("Scenario JSON path") }), run: ({ args }) => logCliCommand(logger, "capture-process", () => @@ -30,7 +30,7 @@ export const registerProcessCommands = ( ), }); cli.command(CLI_COMMANDS.compareProcessCaptures, { - description: "Compare two Process Capture v4 Evidence JSON files", + description: "Compare two process capture Evidence JSON files", args: z.object({ left: z.string().describe("Left capture Evidence JSON path"), right: z.string().describe("Right capture Evidence JSON path"), diff --git a/src/cliSetup.ts b/src/cliSetup.ts index d13b43a61f..75eec19bd5 100644 --- a/src/cliSetup.ts +++ b/src/cliSetup.ts @@ -13,7 +13,6 @@ import type { SetupProgressEvent, SetupResult, } from "./application/Setup.js"; -import { projectDoctorReport } from "./application/DoctorProjection.js"; import { SUPPORTED_CLIENT_DEFINITIONS } from "./application/SupportedClients.js"; const clientDisplayNames: ReadonlyMap = new Map( @@ -107,19 +106,6 @@ export const renderInteractiveSetupResult = (result: SetupResult): void => { outro("Run `rea doctor` for the remaining checks.", promptStreams); }; -/** Keep default non-TTY output actionable without emitting the full catalog. */ -export const conciseSetupResult = (result: SetupResult) => ({ - status: result.status, - plannedActions: result.plannedActions, - appliedActions: result.appliedActions, - clients: result.clients, - doctor: projectDoctorReport(result.doctor, "summary"), - ...(result.code === undefined ? {} : { code: result.code }), - ...(result.remediation === undefined - ? {} - : { remediation: result.remediation }), -}); - const selectSetupActions = async ( actions: readonly SetupAction[], accessible: boolean, diff --git a/src/config.integration.test.ts b/src/config.integration.test.ts index 6380c2d159..8da5b1d635 100644 --- a/src/config.integration.test.ts +++ b/src/config.integration.test.ts @@ -25,7 +25,6 @@ describe("configuration parsing integration", () => { HOPPER_LOADER_ARGS_JSON: '["-l","Mach-O","--aarch64"]', REA_ANALYSIS_PROVIDER: "hopper", REA_EVIDENCE_ROOTS_JSON: '["/tmp/evidence"]', - REA_INVESTIGATION_INPUT_ROOTS_JSON: '["/tmp/releases"]', REA_ANALYSIS_SNAPSHOT_ROOTS_JSON: '["/tmp/analysis"]', }); expect(result.ok).toBe(true); @@ -39,7 +38,6 @@ describe("configuration parsing integration", () => { "--aarch64", ]); expect(result.value.evidenceFilePolicy.roots).toEqual(["/tmp/evidence"]); - expect(result.value.investigationInputRoots).toEqual(["/tmp/releases"]); expect(result.value.analysisSnapshotFilePolicy.roots).toEqual([ "/tmp/analysis", ]); diff --git a/src/config.test.ts b/src/config.test.ts index aa1506f5e4..1b17f9d339 100644 --- a/src/config.test.ts +++ b/src/config.test.ts @@ -407,7 +407,6 @@ describe("runtime target configuration", () => { maxStringLength: 1024 * 1024, maxNodes: 1_000_000, }, - investigationInputRoots: [], analysisSnapshotFilePolicy: { roots: [], maxBytes: 64 * 1024 * 1024, @@ -441,19 +440,6 @@ describe("runtime collection configuration", () => { }, ); - it("reports the configured string-array size limit", () => { - const result = parseConfig({ - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify( - Array.from({ length: 129 }, (_, index) => `/input/${String(index)}`), - ), - }); - expect(result.ok).toBe(false); - if (!result.ok) - expect(result.error.message).toBe( - "REA_INVESTIGATION_INPUT_ROOTS_JSON must encode at most 128 strings", - ); - }); - it("parses supported log levels and rejects unknown levels", () => { const configured = parseConfig({ REA_LOG_LEVEL: "debug" }); expect(configured.ok && configured.value.logLevel).toBe("debug"); @@ -478,30 +464,16 @@ describe("runtime collection configuration", () => { } }); - it("parses investigation input roots independently from evidence roots", () => { + it("parses evidence roots", () => { const result = parseConfig({ REA_EVIDENCE_ROOTS_JSON: '["/evidence"]', - REA_INVESTIGATION_INPUT_ROOTS_JSON: '["/releases", "/builds"]', }); expect(result.ok).toBe(true); if (result.ok) { expect(result.value.evidenceFilePolicy.roots).toEqual(["/evidence"]); - expect(result.value.investigationInputRoots).toEqual([ - "/releases", - "/builds", - ]); } }); - it.each(["not-json", "{}", '["/ok", 1]'])( - "rejects invalid investigation input roots: %s", - (encoded) => { - expect( - parseConfig({ REA_INVESTIGATION_INPUT_ROOTS_JSON: encoded }).ok, - ).toBe(false); - }, - ); - it.each(["not-json", "{}", '["/ok", 1]'])( "rejects invalid reference source roots: %s", (encoded) => { diff --git a/src/config/environment.ts b/src/config/environment.ts index 1d4dc09418..9f45b2a433 100644 --- a/src/config/environment.ts +++ b/src/config/environment.ts @@ -47,7 +47,6 @@ const environmentSchema = z REA_PROCESS_WORKING_ROOTS_JSON: z.string().default("[]"), REA_PROCESS_ALLOWED_ENV_JSON: z.string().default("[]"), REA_EVIDENCE_ROOTS_JSON: z.string().default("[]"), - REA_INVESTIGATION_INPUT_ROOTS_JSON: z.string().default("[]"), REA_ANALYSIS_SNAPSHOT_ROOTS_JSON: z.string().default("[]"), REA_REFERENCE_ROOTS_JSON: z.string().default("[]"), REA_REFERENCE_SECRET_PATTERNS_JSON: z.string().default("[]"), diff --git a/src/config/parseConfig.ts b/src/config/parseConfig.ts index 41cacf84e6..815ce907ed 100644 --- a/src/config/parseConfig.ts +++ b/src/config/parseConfig.ts @@ -54,7 +54,6 @@ const defaultHopperLauncherPath = (): string => interface ParsedArrays { readonly loaderArgs: readonly string[]; readonly evidenceRoots: readonly string[]; - readonly investigationInputRoots: readonly string[]; readonly analysisSnapshotRoots: readonly string[]; readonly referenceRoots: readonly string[]; readonly secretPatterns: readonly string[]; @@ -80,11 +79,6 @@ const parseAllArrays = ( "REA_EVIDENCE_ROOTS_JSON", ); if (!evidenceRoots.ok) return evidenceRoots; - const investigationInputRoots = parseStringArray( - env.REA_INVESTIGATION_INPUT_ROOTS_JSON, - "REA_INVESTIGATION_INPUT_ROOTS_JSON", - ); - if (!investigationInputRoots.ok) return investigationInputRoots; const analysisSnapshotRoots = parseStringArray( env.REA_ANALYSIS_SNAPSHOT_ROOTS_JSON, "REA_ANALYSIS_SNAPSHOT_ROOTS_JSON", @@ -108,7 +102,6 @@ const parseAllArrays = ( return ok({ loaderArgs: loaderArgs.value, evidenceRoots: evidenceRoots.value, - investigationInputRoots: investigationInputRoots.value, analysisSnapshotRoots: analysisSnapshotRoots.value, referenceRoots: referenceRoots.value, secretPatterns: secretPatterns.value, @@ -132,7 +125,6 @@ const buildPermissionCeilings = ( const ceilings: PermissionCeiling[] = [ permissionScope("evidence_read", arrays.evidenceRoots), permissionScope("evidence_write", arrays.evidenceRoots), - permissionScope("investigation_input", arrays.investigationInputRoots), permissionScope("investigation_workspace_read", arrays.evidenceRoots), permissionScope("investigation_workspace_write", arrays.evidenceRoots), permissionScope("snapshot_read", arrays.analysisSnapshotRoots), @@ -170,7 +162,6 @@ const buildAppConfig = ( artifactIntegrityContinueEnabled: env.REA_ARTIFACT_INTEGRITY_CONTINUE_ENABLED === "true", evidenceFilePolicy: filePolicy(arrays.evidenceRoots), - investigationInputRoots: arrays.investigationInputRoots, analysisSnapshotFilePolicy: filePolicy(arrays.analysisSnapshotRoots), referenceSourcePolicy: { roots: arrays.referenceRoots, diff --git a/src/config/types.ts b/src/config/types.ts index e01430e00a..a751f21a5d 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -31,7 +31,6 @@ export interface AppConfig { readonly artifactNativeMountEnabled: boolean; readonly artifactIntegrityContinueEnabled: boolean; readonly evidenceFilePolicy: EvidenceFilePolicy; - readonly investigationInputRoots: readonly string[]; readonly analysisSnapshotFilePolicy: EvidenceFilePolicy; readonly referenceSourcePolicy: ReferenceSourcePolicy; readonly browserObservationPolicy: BrowserObservationPolicy; diff --git a/src/contracts/analysisSearchContract.ts b/src/contracts/analysisSearchContract.ts index 0d8d6b8a1c..342a0e466d 100644 --- a/src/contracts/analysisSearchContract.ts +++ b/src/contracts/analysisSearchContract.ts @@ -1,15 +1,12 @@ import { z } from "zod"; -/** Shared bounded provider search input fields. */ +/** Shared provider search input fields. */ export const analysisSearchInput = { pattern: z .string() .min(1) - .max(256) .describe("The literal text or bounded regex pattern to search for"), mode: z.enum(["literal", "regex"]).default("literal"), case_sensitive: z.boolean().default(false).describe("Whether to match case"), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(100).default(100), document: z.string().optional().describe("The document name"), }; diff --git a/src/contracts/applicationToolContracts.ts b/src/contracts/applicationToolContracts.ts index 06f6f18789..c7c1f6c973 100644 --- a/src/contracts/applicationToolContracts.ts +++ b/src/contracts/applicationToolContracts.ts @@ -1,5 +1,4 @@ import { applicationVersionComparisonResultSchema } from "../domain/javascriptApplicationVersionComparisonSchemas.js"; -import { z } from "zod"; import { applicationFeatureTraceResultSchema } from "../domain/javascriptFeatureTraceSchemas.js"; import { javaScriptSemanticTraceResultSchema } from "../domain/javascriptSemanticTraceSchemas.js"; import { javaScriptExportShapeComparisonResultSchema } from "../domain/javascriptExportShapeComparisonSchemas.js"; @@ -64,24 +63,7 @@ const reconstructionObligationLedgerOutputSchema = evidenceResultOf( reconstructionObligationLedgerPageSchema, ); const reconstructionReadinessOutputSchema = evidenceResultOf( - reconstructionReadinessReportSchema - .pick({ - schema: true, - schema_version: true, - report_id: true, - source_digest: true, - report_digest: true, - status: true, - summary: true, - metrics: true, - }) - .extend({ - report_resource_uri: z - .string() - .regex( - /^rea:\/\/evidence\/ev_[a-f0-9]{64}\/reconstruction-readiness-report$/u, - ), - }), + reconstructionReadinessReportSchema, ); const HASH = "0".repeat(64); const NODE_PREPARATION_EXAMPLE = jsonObjectSchema.parse({ @@ -118,14 +100,12 @@ const NODE_PREPARATION_EXAMPLE = jsonObjectSchema.parse({ }); const COVERAGE_WORKSPACE_EXAMPLE = jsonObjectSchema.parse({ - schema_version: 1, workspace_id: `rcw_${HASH}`, name: "replacement", revision: 1, previous_revision_sha256: null, revision_sha256: HASH, evidence_bundle: { - bundle_version: 2, artifacts: [], providers: [], environments: [], @@ -152,7 +132,7 @@ export const APPLICATION_TOOL_CONTRACTS = [ name: "trace_application_feature", ...toolContractMetadata("trace_application_feature"), description: - "Trace a typed literal seed through an authenticated JavaScript Application Graph supplied as full Evidence or an Evidence ID returned earlier in this session. Explicit direction, depth, node, edge, and path bounds apply. Original static, native, passive-runtime, inferred, and unknown authorities remain distinct; native addon handoffs never open a provider or execute the application.", + "Trace a typed literal seed through every reachable part of an authenticated JavaScript Application Graph supplied as full Evidence or an Evidence ID returned earlier in this session. Original static, native, passive-runtime, inferred, and unknown authorities remain distinct; native addon handoffs never open a provider or execute the application.", kind: "application", inputSchema: traceApplicationFeatureRequestSchema, outputSchema: traceOutputSchema, @@ -167,7 +147,7 @@ export const APPLICATION_TOOL_CONTRACTS = [ name: "trace_javascript_semantics", ...toolContractMetadata("trace_javascript_semantics"), description: - "Trace bounded static JavaScript data-flow, direct call/return, and closure relations from authenticated analyze_javascript_application v2 Evidence. Queries declare direction and exact node, relation, depth, function, module, and page limits. Dynamic or unsupported semantics remain explicit unknowns; static reachability never claims runtime execution.", + "Trace static JavaScript data-flow, direct call/return, and closure relations from the inline Evidence returned by analyze_javascript_application. Dynamic or unsupported semantics remain explicit unknowns; static reachability never claims runtime execution.", kind: "application", inputSchema: traceJavaScriptSemanticsRequestSchema, outputSchema: semanticTraceOutputSchema, @@ -302,7 +282,7 @@ export const APPLICATION_TOOL_CONTRACTS = [ name: "execute_node_characterization", ...toolContractMetadata("execute_node_characterization"), description: - "Recompute and execute one separately approved exact Node characterization plan in the owned controlled-replay boundary. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence v2; stale plans fail before execution.", + "Recompute and execute one separately approved exact Node characterization plan in the owned controlled-replay boundary. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence; stale plans fail before execution.", kind: "application", inputSchema: nodeCharacterizationExecutionInputSchema, outputSchema: nodeCharacterizationExecutionOutputSchema, @@ -321,7 +301,7 @@ export const APPLICATION_TOOL_CONTRACTS = [ name: "build_reconstruction_obligation_ledger", ...toolContractMetadata("build_reconstruction_obligation_ledger"), description: - "Generate one deterministic page of a ReconstructionObligationLedger/v1 from an authenticated Evidence v2 bundle, reviewed obligations, and an explicit reconstruction manifest. Static candidates remain candidates; duplicate ownership, missing original or reconstruction cases, missing parser/type, weak verifier authority, unenumerated claims, contradictions, dependencies, and residual unknowns fail closed. Every page carries the same full-ledger closure digest and typed per-obligation diagnostics.", + "Generate one deterministic page of a 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. Every page carries the same full-ledger closure digest and typed per-obligation diagnostics.", kind: "application", inputSchema: reconstructionObligationLedgerInputSchema, outputSchema: reconstructionObligationLedgerOutputSchema, @@ -330,7 +310,6 @@ export const APPLICATION_TOOL_CONTRACTS = [ title: "Generate the first obligation-ledger page", input: { evidence_bundle: { - bundle_version: 2, artifacts: [], providers: [], environments: [], @@ -341,11 +320,9 @@ export const APPLICATION_TOOL_CONTRACTS = [ }, reviewed_obligations: [], manifest: { - schema_version: 1, bindings: [], contradictions: [], }, - limits: { max_obligations: 1_000 }, page: { offset: 0, limit: 50 }, }, }, diff --git a/src/contracts/applicationWorkflowInputContracts.ts b/src/contracts/applicationWorkflowInputContracts.ts index f8e904f292..52fbb49ba4 100644 --- a/src/contracts/applicationWorkflowInputContracts.ts +++ b/src/contracts/applicationWorkflowInputContracts.ts @@ -15,13 +15,9 @@ const evidenceIdSchema = z const traceApplicationFeatureFacts = { native_observations: traceApplicationFeatureInputSchema.shape.native_observations, - native_observation_evidence_ids: z - .array(evidenceIdSchema) - .max(64) - .default([]), + native_observation_evidence_ids: z.array(evidenceIdSchema).default([]), seed: traceApplicationFeatureInputSchema.shape.seed, direction: traceApplicationFeatureInputSchema.shape.direction, - limits: traceApplicationFeatureInputSchema.shape.limits, } as const; /** MCP/CLI trace request accepting full Evidence or a ledger reference. */ @@ -51,16 +47,10 @@ export const traceJavaScriptSemanticsRequestSchema = z.union([ const compareApplicationVersionsFacts = { left_native_observations: compareApplicationVersionsInputSchema.shape.left_native_observations, - left_native_observation_evidence_ids: z - .array(evidenceIdSchema) - .max(64) - .default([]), + left_native_observation_evidence_ids: z.array(evidenceIdSchema).default([]), right_native_observations: compareApplicationVersionsInputSchema.shape.right_native_observations, - right_native_observation_evidence_ids: z - .array(evidenceIdSchema) - .max(64) - .default([]), + right_native_observation_evidence_ids: z.array(evidenceIdSchema).default([]), limits: compareApplicationVersionsInputSchema.shape.limits, unknown_registry_approved: compareApplicationVersionsInputSchema.shape.unknown_registry_approved, diff --git a/src/contracts/artifactComparisonExample.ts b/src/contracts/artifactComparisonExample.ts index d8e80ed80d..c18143f616 100644 --- a/src/contracts/artifactComparisonExample.ts +++ b/src/contracts/artifactComparisonExample.ts @@ -7,7 +7,6 @@ const inventory = (digit: string) => { const occurrenceId = `occ_${sha}`; return jsonValueSchema.parse({ manifest: { - schema_version: 1, manifest_id: `agm_${sha}`, root_artifact_id: artifactId, root_sha256: sha, diff --git a/src/contracts/artifactToolContracts.ts b/src/contracts/artifactToolContracts.ts index d63634d88e..674cc14d9e 100644 --- a/src/contracts/artifactToolContracts.ts +++ b/src/contracts/artifactToolContracts.ts @@ -1,4 +1,3 @@ -import { isAbsolute } from "node:path"; import { z } from "zod"; import type { ToolContract } from "./toolContracts.js"; @@ -6,53 +5,21 @@ import { artifactOutputSchemas } from "./toolOutputSchemas.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { toolContractMetadata } from "./toolEffects.js"; import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; -import { artifactInspectionLimitsSchema } from "../domain/artifactInspection.js"; - -const pageInput = { - node_offset: z.number().int().min(0).default(0), - node_limit: z.number().int().min(1).max(500).default(100), - occurrence_offset: z.number().int().min(0).default(0), - occurrence_limit: z.number().int().min(1).max(500).default(100), - edge_offset: z.number().int().min(0).default(0), - edge_limit: z.number().int().min(1).max(500).default(100), -}; - -const traversalLimitsInput = { - max_entries: z.number().int().min(1).max(1_000_000).default(10_000), - max_total_bytes: z - .number() - .int() - .min(1) - .max(Number.MAX_SAFE_INTEGER) - .default(1_073_741_824), - max_entry_bytes: z - .number() - .int() - .min(1) - .max(Number.MAX_SAFE_INTEGER) - .default(268_435_456), - max_compression_ratio: z.number().min(1).max(100_000).default(1_000), - max_depth: z.number().int().min(0).max(100).default(20), - max_path_bytes: z.number().int().min(1).max(65_535).default(4_096), -}; - const integrityInput = { fail: { integrity_policy: z.literal("fail").default("fail"), integrity_continue_approved: z.literal(false).default(false), - max_integrity_mismatches: z.number().int().min(1).max(100).default(10), + max_integrity_mismatches: z.number().int().min(1).default(10), }, continue: { integrity_policy: z.literal("record-and-continue"), integrity_continue_approved: z.literal(true), - max_integrity_mismatches: z.number().int().min(1).max(100).default(10), + max_integrity_mismatches: z.number().int().min(1).default(10), }, } as const; const artifactInventoryFacts = { native_mount_approved: z.boolean().default(false), - ...pageInput, - ...traversalLimitsInput, } as const; /** Exact caller boundary for deterministic artifact inventory. */ @@ -64,25 +31,13 @@ export const artifactInventoryInputSchema = z.union([ /** Exact caller boundary for approved artifact extraction. */ export const artifactExtractionInputSchema = z.object({ approved: z.literal(true), - output_root: z - .string() - .min(1) - .max(4_096) - .refine(isAbsolute, "Extraction output root must be absolute"), - occurrence_ids: z - .array(z.string().regex(/^occ_[a-f0-9]{64}$/u)) - .min(1) - .max(500), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(500).default(100), - ...traversalLimitsInput, + output_root: z.string().min(1), + occurrence_ids: z.array(z.string().regex(/^occ_[a-f0-9]{64}$/u)).min(1), }); /** Bounded provider-neutral inspection using one atomic inventory substep. */ const artifactInspectionFacts = { native_mount_approved: z.boolean().default(false), - ...artifactInspectionLimitsSchema.shape, - ...traversalLimitsInput, } as const; export const artifactInspectionInputSchema = z.union([ z.object({ ...artifactInspectionFacts, ...integrityInput.fail }), @@ -129,12 +84,12 @@ const artifact = < export const ARTIFACT_TOOL_CONTRACTS = [ artifact( "inventory_artifact", - "After open_binary binds a local archive, application package, or other artifact—or when one is already active—inventory it as a deterministic, content-addressed artifact graph. This tool accepts no path; in a target-free session open the target first. Returns bounded node and edge pages without extracting or mounting by default.", + "After open_binary binds a local archive, application package, or other artifact—or when one is already active—inventory the complete content-addressed artifact graph in one call. This tool accepts no path; in a target-free session open the target first. It does not extract or mount by default.", artifactInventoryInputSchema, ), artifact( "inspect_artifact", - "After open_binary binds a local archive, application package, or other artifact—or when one is already active—inspect it through one bounded, cancellable inventory substep. This tool accepts no path; in a target-free session open the target first. Returns the full substep Evidence and its ID, observations, derived relationships, hypotheses, contradictions, unexplored branches, limitations, and format-specific next probes. Any substep failure fails the whole call.", + "After open_binary binds a local archive, application package, or other artifact—or when one is already active—inspect the complete artifact inventory in one cancellable substep. This tool accepts no path; in a target-free session open the target first. Returns the full substep Evidence, observations, derived relationships, hypotheses, contradictions, unexplored branches, limitations, and format-specific next probes. Any substep failure fails the whole call.", artifactInspectionInputSchema, ), artifact( diff --git a/src/contracts/browserScenarioToolContracts.ts b/src/contracts/browserScenarioToolContracts.ts index 4eb7749f3a..2431f2dd5f 100644 --- a/src/contracts/browserScenarioToolContracts.ts +++ b/src/contracts/browserScenarioToolContracts.ts @@ -6,7 +6,6 @@ import { browserScenarioCaptureSchema } from "../domain/browserScenarioCapture.j import type { JsonValue } from "../domain/jsonValue.js"; const example: Record = { - schema_version: 1, browser: { mode: "launch", executable_path: "/opt/chromium/chrome", diff --git a/src/contracts/browserToolContracts.ts b/src/contracts/browserToolContracts.ts index ab0dc590d0..a77bac1ab0 100644 --- a/src/contracts/browserToolContracts.ts +++ b/src/contracts/browserToolContracts.ts @@ -65,7 +65,6 @@ const scenarioArtifacts = { storage: { state: "not_requested" }, }; const exampleScenarioCapture = () => ({ - schema_version: 1, browser: { mode: "connect", process_ownership: "external", @@ -121,7 +120,7 @@ export const BROWSER_TOOL_CONTRACTS = [ name: "list_browser_targets", ...toolContractMetadata("list_browser_targets"), description: - "List bounded page targets from an approved user-owned loopback Chrome DevTools Protocol endpoint. Only targets whose current URL matches an approved exact origin are returned; URL credentials, query values, and fragments are redacted.", + "List every page target from an approved user-owned loopback Chrome DevTools Protocol endpoint whose current URL matches an approved exact origin. URL credentials, query values, and fragments are redacted.", kind: "browser-provider", inputSchema: listBrowserTargetsInputSchema, outputSchema: listOutputSchema, @@ -132,8 +131,6 @@ export const BROWSER_TOOL_CONTRACTS = [ cdp_endpoint: endpoint, allowed_origins: [origin], approved: true, - offset: 0, - limit: 100, }, }, ], diff --git a/src/contracts/contractSnapshot.test.ts b/src/contracts/contractSnapshot.test.ts index 4dea4c65d8..0cec7d647b 100644 --- a/src/contracts/contractSnapshot.test.ts +++ b/src/contracts/contractSnapshot.test.ts @@ -58,19 +58,6 @@ const describesObject = (schema: ReturnType) => ), ); -const emptySchemaPaths = (value: unknown, path = "$"): string[] => { - if (Array.isArray(value)) - return value.flatMap((item, index) => - emptySchemaPaths(item, `${path}[${String(index)}]`), - ); - if (typeof value !== "object" || value === null) return []; - const entries = Object.entries(value); - if (entries.length === 0) return [path]; - return entries.flatMap(([key, item]) => - emptySchemaPaths(item, `${path}.${key}`), - ); -}; - describe("tool contract surface", () => { it("advertises complete typed schemas and annotations for every public tool", () => { const contracts = TOOL_CONTRACTS; @@ -90,9 +77,10 @@ describe("tool contract surface", () => { expect(contract.examples).toHaveLength(1); for (const example of contract.examples) { expect(example.title.length).toBeGreaterThan(10); - expect(contract.inputSchema.safeParse(example.input).success).toBe( - true, - ); + expect( + contract.inputSchema.safeParse(example.input).success, + `${contract.name}: ${example.title}`, + ).toBe(true); } } }); @@ -138,8 +126,7 @@ describe("tool contract surface", () => { { name: "update_unknown", kind: "session" }, { name: "verify_unknown_resolution", kind: "session" }, { name: "run_replay_machine", kind: "session" }, - { name: "snapshot_evidence_bundle", kind: "session" }, - { name: "release_evidence_bundle", kind: "session" }, + { name: "get_evidence_bundle", kind: "session" }, { name: "get_navigation_context", kind: "session" }, { name: "inspect_address_context", kind: "session" }, ]); @@ -197,26 +184,4 @@ describe("tool contract surface", () => { expect(contract.description).toMatch(/[.;]/u); } }); - - it("publishes no unconstrained output-schema holes across all tools", () => { - const contracts = [ - ...OFFICIAL_TOOL_CONTRACTS, - ...ENHANCED_TOOL_CONTRACTS, - ...NATIVE_TOOL_CONTRACTS, - ...ARTIFACT_TOOL_CONTRACTS, - ...MANAGED_TOOL_CONTRACTS, - ...MANAGED_WORKFLOW_TOOL_CONTRACTS, - ...BROWSER_TOOL_CONTRACTS, - ...BROWSER_SCENARIO_TOOL_CONTRACTS, - ...ELECTRON_TOOL_CONTRACTS, - ...JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS, - ...APPLICATION_TOOL_CONTRACTS, - ...SESSION_TOOL_CONTRACTS, - ]; - expect(contracts).toHaveLength(TOOL_CONTRACTS.length); - for (const contract of contracts) { - const schema = contractJsonSchema(contract.outputSchema); - expect(emptySchemaPaths(schema), contract.name).toEqual([]); - } - }); }); diff --git a/src/contracts/electronToolContracts.ts b/src/contracts/electronToolContracts.ts index 2827b2e2f3..c1d9ed95e9 100644 --- a/src/contracts/electronToolContracts.ts +++ b/src/contracts/electronToolContracts.ts @@ -1,5 +1,3 @@ -import { z } from "zod"; - import type { ToolContract } from "./toolContracts.js"; import { toolContractMetadata } from "./toolEffects.js"; import { evidenceResultOf } from "./toolOutputSchemas.js"; @@ -15,11 +13,8 @@ import { } from "../domain/electronActiveObservation.js"; import { analyzeJavaScriptApplicationInputSchema, - javaScriptApplicationAnalysisResultV1Schema, javascriptApplicationAnalysisResultSchema, } from "../domain/javascriptApplicationAnalysis.js"; -import { JAVASCRIPT_APPLICATION_NODE_KINDS } from "../domain/javascriptApplicationGraphSchemas.js"; -import { applicationCoverageSchema } from "../domain/javascriptApplicationEvidenceSchemas.js"; import { javascriptRuntimeReconciliationResultSchema, reconcileJavaScriptRuntimeInputSchema, @@ -28,88 +23,8 @@ import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "./javascriptRuntimeRe const listOutputSchema = evidenceResultOf(electronTargetListSchema); const inspectionOutputSchema = evidenceResultOf(electronPageInspectionSchema); -/** MCP-only response selection; analysis identity does not depend on projection. */ -export const analyzeJavaScriptApplicationToolInputSchema = - analyzeJavaScriptApplicationInputSchema.extend({ - detail: z - .enum(["summary", "full"]) - .default("summary") - .describe( - "summary returns bounded findings and paged graph resource URIs; full returns the complete graph only when explicitly required", - ), - }); - -/** Bounded default projection for agent-facing JavaScript application analysis. */ -const applicationGraphSummarySchema = z.strictObject({ - graph_id: z.string().regex(/^jag_[a-f0-9]{64}$/u), - node_count: z.number().int().min(0), - edge_count: z.number().int().min(0), - roots: z.strictObject({ - items: z.array(z.string().regex(/^jag_node_[a-f0-9]{64}$/u)), - total: z.number().int().min(0), - truncated: z.boolean(), - }), - node_kinds: z.array( - z.strictObject({ - kind: z.enum(JAVASCRIPT_APPLICATION_NODE_KINDS), - count: z.number().int().min(1), - }), - ), - top_findings: z.array( - z.strictObject({ - node_id: z.string().regex(/^jag_node_[a-f0-9]{64}$/u), - kind: z.enum(JAVASCRIPT_APPLICATION_NODE_KINDS), - label: z.string().nullable(), - authority: z.string(), - state: z.string(), - confidence: z.string(), - location: z.json(), - }), - ), - coverage: applicationCoverageSchema, - limitations: z.array(z.string()), - pages: z.strictObject({ - nodes: z.string().startsWith("rea://evidence/"), - edges: z.string().startsWith("rea://evidence/"), - page_limit: z.number().int().min(1).max(500), - }), -}); - -const semanticGraphSummarySchema = z.strictObject({ - graph_id: z.string().regex(/^jsrg_[a-f0-9]{64}$/u), - nodes: z.number().int().min(0), - relations: z.number().int().min(0), - unknown_frontiers: z.number().int().min(0), - fingerprints: z.number().int().min(0), - coverage: z.enum(["complete", "partial", "unknown", "unavailable"]), - query_tool: z.literal("trace_javascript_semantics"), -}); - -const summaryFields = { - unknowns: z.array(z.string().min(1).max(4_096)).max(1_000), - graph: applicationGraphSummarySchema, -}; - -/** Bounded default projection for agent-facing JavaScript application analysis. */ -export const javascriptApplicationAnalysisSummarySchema = z.discriminatedUnion( - "schema_version", - [ - javaScriptApplicationAnalysisResultV1Schema - .omit({ graph: true }) - .extend(summaryFields), - javaScriptApplicationAnalysisResultV1Schema.omit({ graph: true }).extend({ - schema_version: z.literal(2), - ...summaryFields, - semantic_graph: semanticGraphSummarySchema, - }), - ], -); - const applicationOutputSchema = evidenceResultOf( - z.union([ - javascriptApplicationAnalysisSummarySchema, - javascriptApplicationAnalysisResultSchema, - ]), + javascriptApplicationAnalysisResultSchema, ); const reconciliationOutputSchema = evidenceResultOf( javascriptRuntimeReconciliationResultSchema, @@ -118,7 +33,6 @@ const reconciliationOutputSchema = evidenceResultOf( const endpoint = "http://127.0.0.1:9223"; const root = "/Applications/Example.app/Contents/Resources"; const activeExample = { - schema_version: 1, executable_path: "/Applications/Electron.app/Contents/MacOS/Electron", application_path: "/Applications/Example.app/Contents/Resources/main.js", application_root: "/Applications/Example.app/Contents/Resources", @@ -141,7 +55,7 @@ export const ELECTRON_TOOL_CONTRACTS = [ name: "list_electron_targets", ...toolContractMetadata("list_electron_targets"), description: - "List Electron file:// page targets from an approved user-owned loopback CDP endpoint. Every path is canonicalized and must remain contained by an approved filesystem root, including after symlink resolution.", + "List every Electron file:// page target from an approved user-owned loopback CDP endpoint. Every path is canonicalized and must remain contained by an approved filesystem root, including after symlink resolution.", kind: "electron-provider", inputSchema: listElectronTargetsInputSchema, outputSchema: listOutputSchema, @@ -152,8 +66,6 @@ export const ELECTRON_TOOL_CONTRACTS = [ cdp_endpoint: endpoint, allowed_file_roots: [root], approved: true, - offset: 0, - limit: 100, }, }, ], @@ -194,19 +106,16 @@ export const ELECTRON_TOOL_CONTRACTS = [ name: "analyze_javascript_application", ...toolContractMetadata("analyze_javascript_application"), description: - "Statically reconstruct one approved local ASAR or extracted JavaScript application without executing it. The default summary returns architecture/security counts, top evidence-backed findings, unknowns, and paged graph resource URIs; request detail=full only when the complete graph must be returned immediately. Identical inputs are deterministic, so do not repeat the call or reread full Evidence without a specific missing detail.", + "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.", kind: "electron-provider", - inputSchema: analyzeJavaScriptApplicationToolInputSchema, + inputSchema: analyzeJavaScriptApplicationInputSchema, outputSchema: applicationOutputSchema, examples: [ { - title: "Analyze one approved local Electron application", + title: "Analyze one local JavaScript application", input: { input_path: "/Applications/Example.app/Contents/Resources/app.asar", format: "auto", - approved: true, - source_map_read_approved: false, - detail: "summary", }, }, ], diff --git a/src/contracts/enhancedInputs.ts b/src/contracts/enhancedInputs.ts index f471a0a7df..889b94fcc6 100644 --- a/src/contracts/enhancedInputs.ts +++ b/src/contracts/enhancedInputs.ts @@ -3,8 +3,6 @@ import { z } from "zod"; const traceLiteralInputSchema = z.strictObject({ query: z.string().min(1), case_sensitive: z.boolean().default(false), - limit: z.number().int().min(1).max(100).default(20), - max_operations: z.number().int().min(1).max(100).default(20), unknown_registry_approved: z .literal(true) .optional() @@ -19,54 +17,20 @@ export const enhancedInputSchemas = { batch_decompile: z.strictObject({ addresses: z .array(z.string().describe("A provider-normalized procedure address")) - .max(20) .default([]), }), get_call_graph: z.strictObject({ address: z.string().describe("A provider-normalized procedure address"), direction: z.enum(["forward", "backward"]).default("forward"), - depth: z.number().int().min(1).max(5).default(2), }), analyze_swift_types: z.strictObject({}), find_xrefs_to_name: z.strictObject({ name: z.string() }), - binary_overview: z.strictObject({ - detail: z.enum(["concise", "detailed"]).default("concise"), - limit: z.number().int().min(1).max(50).default(10), - }), + binary_overview: z.strictObject({}), analyze_function: z.strictObject({ procedure: z.string().describe("A procedure name or address"), - include_assembly: z.boolean().default(false), - limit: z.number().int().min(1).max(500).default(100), - max_pseudocode_chars: z.number().int().min(1).max(100_000).default(20_000), - max_instructions: z.number().int().min(1).max(5_000).default(500), - pseudocode_offset: z.number().int().min(0).default(0), - assembly_offset: z.number().int().min(0).default(0), - collection_offset: z - .strictObject({ - comments: z.number().int().min(0).default(0), - callers: z.number().int().min(0).default(0), - callees: z.number().int().min(0).default(0), - incoming_references: z.number().int().min(0).default(0), - outgoing_references: z.number().int().min(0).default(0), - referenced_strings: z.number().int().min(0).default(0), - referenced_names: z.number().int().min(0).default(0), - basic_blocks: z.number().int().min(0).default(0), - }) - .default({ - comments: 0, - callers: 0, - callees: 0, - incoming_references: 0, - outgoing_references: 0, - referenced_strings: 0, - referenced_names: 0, - basic_blocks: 0, - }), }), inspect_native_api: z.strictObject({ procedure: z.string().describe("A procedure name or address"), - max_pseudocode_chars: z.number().int().min(1).max(100_000).default(20_000), - max_instructions: z.number().int().min(1).max(5_000).default(500), unknown_registry_approved: z .literal(true) .optional() @@ -83,13 +47,12 @@ export const enhancedInputSchemas = { .describe("An optional provider-normalized destination address") .optional(), direction: z.enum(["forward", "backward"]).default("forward"), - max_depth: z.number().int().min(1).max(10).default(5), - max_nodes: z.number().int().min(1).max(500).default(100), - max_operations: z.number().int().min(1).max(500).default(100), unknown_registry_approved: z .literal(true) .optional() - .describe("Explicit approval to record bounded residuals durably"), + .describe( + "Explicit approval to record unresolved provider results durably", + ), }), } as const; diff --git a/src/contracts/functionComparisonExample.ts b/src/contracts/functionComparisonExample.ts index bc7fa4e574..5229dc6cd9 100644 --- a/src/contracts/functionComparisonExample.ts +++ b/src/contracts/functionComparisonExample.ts @@ -2,14 +2,6 @@ import { enhancedInputSchemas } from "./enhancedInputs.js"; import { createEvidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -const bounded = (items: readonly Item[]) => ({ - items, - total: items.length, - returned: items.length, - truncated: false, - next_offset: null, -}); - const dossier = (text: string) => jsonValueSchema.parse({ procedure: { @@ -18,23 +10,16 @@ const dossier = (text: string) => signature: "int main(void)", locals: [], }, - pseudocode: { - text, - total_chars: [...text].length, - returned_chars: [...text].length, - truncated: false, - next_offset: null, - }, - assembly: bounded([]), - comments: bounded([]), - callers: bounded([]), - callees: bounded([]), - incoming_references: bounded([]), - outgoing_references: bounded([]), - referenced_strings: bounded([]), - referenced_names: bounded([]), - basic_blocks: bounded([{ start: "0x1000", end: "0x1001", successors: [] }]), - instruction_scan: { scanned: 1, truncated: false }, + pseudocode: text, + assembly: [], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [{ start: "0x1000", end: "0x1001", successors: [] }], }); const observe = (digit: string, text: string) => diff --git a/src/contracts/functionInstructionContract.ts b/src/contracts/functionInstructionContract.ts index 0e38d37097..64bdec1c35 100644 --- a/src/contracts/functionInstructionContract.ts +++ b/src/contracts/functionInstructionContract.ts @@ -1,9 +1,7 @@ import { z } from "zod"; -/** Provider-neutral input for one bounded raw function-instruction window. */ +/** Provider-neutral input for a function's complete raw instruction list. */ export const functionInstructionInputSchema = z.object({ procedure: z.string().describe("The procedure name or address"), - offset: z.number().int().min(0).max(100_000).default(0), - limit: z.number().int().min(1).max(500).default(64), document: z.string().optional().describe("The document name"), }); diff --git a/src/contracts/functionWorkflowToolContracts.ts b/src/contracts/functionWorkflowToolContracts.ts index e4cce1c31d..3816f8a20e 100644 --- a/src/contracts/functionWorkflowToolContracts.ts +++ b/src/contracts/functionWorkflowToolContracts.ts @@ -36,10 +36,10 @@ const functionWorkflow = ( export const FUNCTION_WORKFLOW_TOOL_CONTRACTS = [ functionWorkflow( "analyze_function", - "Preferred bounded analysis for one procedure symbol or address. Returns identity, provider-specific pseudocode, optional assembly, comments, calls, typed-or-explicitly-unavailable references, referenced strings/names, and local CFG blocks with exact truncation metadata. Providers with a structured decompiler model also expose native API boundary types, confidence, evidence, jump-table data/target addresses, and explicit decompiler-artifact labels.", + "Return one complete function dossier inline, including identity, provider-specific pseudocode and assembly, comments, calls, references, referenced strings/names, local CFG blocks, and any available native API boundary observations.", ), functionWorkflow( "inspect_native_api", - "Reconstruct one native function boundary through inspectable substeps. Returns structured inferred return/parameter types with confidence and evidence, jump-table dispatch/data/target mappings, explicit decompiler-artifact labels, unsupported branches, and residual unknowns.", + "Reconstruct one native function boundary with structured return/parameter types, confidence, evidence, jump-table dispatch/data/target mappings, unsupported branches, and residual unknowns.", ), ] as const satisfies readonly ToolContract[]; diff --git a/src/contracts/hopperMemoryContracts.ts b/src/contracts/hopperMemoryContracts.ts index 0488ea5ac2..3eb0325226 100644 --- a/src/contracts/hopperMemoryContracts.ts +++ b/src/contracts/hopperMemoryContracts.ts @@ -15,7 +15,7 @@ export const HOPPER_MEMORY_TOOL_DEFINITIONS = [ "Read at most 4,096 analyzed bytes from one provider-normalized virtual address. The hexadecimal payload reports the exact returned length; incomplete reads remain explicit and unsupported provider APIs return typed capability unavailability.", inputSchema: z.object({ address, - length: z.number().int().min(1).max(4_096).default(256), + length: z.number().int().min(1).default(256), document, }), }, diff --git a/src/contracts/investigationExamples.ts b/src/contracts/investigationExamples.ts index 849de9108e..04a359dceb 100644 --- a/src/contracts/investigationExamples.ts +++ b/src/contracts/investigationExamples.ts @@ -11,8 +11,6 @@ import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "./processCaptureExample.js"; const comparison = compareFunctions( FUNCTION_COMPARISON_EXAMPLE.left, FUNCTION_COMPARISON_EXAMPLE.right, - 0, - 100, ); export const FUNCTION_COMPARISON_EVIDENCE = createEvidence( @@ -26,10 +24,8 @@ export const FUNCTION_COMPARISON_EVIDENCE = createEvidence( predicateType: "rea.function-comparison/v1", operation: "compare_functions", parameters: { - left_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.left.evidence_id], - right_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.right.evidence_id], - offset: 0, - limit: 100, + left_evidence_id: FUNCTION_COMPARISON_EXAMPLE.left.evidence_id, + right_evidence_id: FUNCTION_COMPARISON_EXAMPLE.right.evidence_id, }, result: jsonValueSchema.parse(comparison), confidence: "derived", @@ -49,7 +45,7 @@ const PROCESS_PROVIDER = { const capture = parseProcessCapture(EMPTY_PROCESS_CAPTURE_EXAMPLE); const captureEvidence = (scenario: string) => createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-capture/v4", + predicateType: "rea.process-capture", operation: "capture_process_scenario", parameters: { scenario }, result: jsonValueSchema.parse(capture), @@ -68,7 +64,7 @@ export const PROCESS_COMPARISON_EVIDENCE = createEvidence( undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-comparison/v3", + predicateType: "rea.process-comparison", operation: "compare_process_captures", parameters: { left_evidence_id: PROCESS_CAPTURE_REFERENCE.evidence_id, diff --git a/src/contracts/javascriptRuntimeObservationToolContracts.ts b/src/contracts/javascriptRuntimeObservationToolContracts.ts index 43e10d12f9..eb78ab512c 100644 --- a/src/contracts/javascriptRuntimeObservationToolContracts.ts +++ b/src/contracts/javascriptRuntimeObservationToolContracts.ts @@ -17,7 +17,7 @@ export const JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS = [ name: "list_javascript_runtime_targets", ...toolContractMetadata("list_javascript_runtime_targets"), description: - "List attachable Node/Electron V8 Inspector targets from one approved literal-loopback endpoint. Only targets inside exact canonical file roots or exact HTTP(S) origins are retained; excluded target locations never enter Evidence.", + "List every attachable Node/Electron V8 Inspector target from one approved literal-loopback endpoint. Only targets inside exact canonical file roots or exact HTTP(S) origins are retained; excluded target locations never enter Evidence.", kind: "runtime-provider", inputSchema: listJavaScriptRuntimeTargetsInputSchema, outputSchema: evidenceResultOf(javascriptRuntimeTargetListSchema), @@ -29,8 +29,6 @@ export const JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS = [ allowed_file_roots: [root], allowed_origins: [], approved: true, - offset: 0, - limit: 100, }, }, ], diff --git a/src/contracts/javascriptRuntimeReconciliationExample.ts b/src/contracts/javascriptRuntimeReconciliationExample.ts index 6f93202564..3fad09ca48 100644 --- a/src/contracts/javascriptRuntimeReconciliationExample.ts +++ b/src/contracts/javascriptRuntimeReconciliationExample.ts @@ -4,6 +4,11 @@ import { createJavaScriptApplicationNode, } from "../domain/javascriptApplicationGraph.js"; import { createWebTextArtifact } from "../domain/webContentArtifact.js"; +import { + createJavaScriptSemanticGraph, + createJavaScriptSemanticGraphNode, +} from "../domain/javascriptSemanticGraph.js"; +import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES } from "../domain/javascriptSemanticGraphSchemas.js"; const applicationSha256 = "1".repeat(64); const script = createWebTextArtifact( @@ -59,13 +64,51 @@ const asset = createJavaScriptApplicationNode({ }); const graph = createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [asset.node_id], nodes: [asset], edges: [], coverage: completeCoverage, limitations: [], }); +const semanticNode = createJavaScriptSemanticGraphNode({ + kind: "module", + identity: { + artifact_sha256: applicationSha256, + module_path: "renderer.js", + source_range: null, + role_key: "example-module", + }, + function_node_id: null, + application_node_ids: [asset.node_id], + label: "renderer.js", + properties: {}, + evidence: graphEvidence, +}); +const semanticGraph = createJavaScriptSemanticGraph({ + schema: "JavaScriptSemanticRelationGraph", + root_artifact_sha256: applicationSha256, + application_graph_id: graph.graph_id, + root_node_ids: [semanticNode.node_id], + nodes: [semanticNode], + relations: [], + fingerprints: [], + unknowns: [], + coverage: { + status: "unknown", + truncated: false, + omitted_nodes: 0, + omitted_relations: 0, + limits: [], + families: JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => ({ + family, + status: "unknown" as const, + retained_relations: 0, + omitted_relations: 0, + unknown_ids: [], + })), + }, + limitations: ["Semantic relations are unavailable in this minimal example."], +}); const staticEvidence = createEvidence( { path: inputPath, sha256: applicationSha256, format: "directory" }, @@ -75,17 +118,17 @@ const staticEvidence = createEvidence( version: "1", }, { - predicateType: "rea.javascript-application-analysis/v1", + predicateType: "rea.javascript-application-analysis", operation: "analyze_javascript_application", - parameters: { approved: true, source_map_read_approved: false }, + parameters: {}, result: { - schema_version: 1, input_path: inputPath, format: "directory", root_artifact_sha256: applicationSha256, inventory_manifest_id: `agm_${"2".repeat(64)}`, inventory_graph_sha256: "3".repeat(64), graph, + semantic_graph: semanticGraph, summary: { browser_windows: 0, explicit_web_preferences: 0, @@ -116,7 +159,6 @@ const staticEvidence = createEvidence( text_bytes_read: script.bytes, omitted_text_files: 0, limit_omitted_text_files: 0, - policy_filtered_text_files: 0, invalid_utf8_files: 0, parsed_javascript_files: 1, visited_ast_nodes: 1, @@ -153,7 +195,6 @@ const runtimeEvidence = createEvidence( source_capture_approved: true, }, result: { - schema_version: 1, browser: { product: "Electron/example", protocol_version: "1.3", diff --git a/src/contracts/managedToolContracts.ts b/src/contracts/managedToolContracts.ts index f7abe636d3..4fef71b3e7 100644 --- a/src/contracts/managedToolContracts.ts +++ b/src/contracts/managedToolContracts.ts @@ -5,28 +5,6 @@ import { managedOutputSchemas } from "./toolOutputSchemas.js"; import { toolContractMetadata } from "./toolEffects.js"; import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; -const managedReadLimits = { - max_file_bytes: z - .number() - .int() - .min(4_096) - .max(1_073_741_824) - .default(268_435_456), - max_metadata_bytes: z - .number() - .int() - .min(256) - .max(268_435_456) - .default(67_108_864), - max_table_rows: z.number().int().min(1).max(1_000_000).default(100_000), - max_heap_item_bytes: z - .number() - .int() - .min(1) - .max(16_777_216) - .default(1_048_576), -}; - /** Exact caller boundary for execution-free PE/CLI triage and identity. */ export const managedArtifactInputSchema = z.object({ path: z @@ -36,48 +14,13 @@ export const managedArtifactInputSchema = z.object({ .describe( "Managed PE/CLI path to open before inspection; omit only when a managed target is already active", ), - reference_offset: z.number().int().min(0).default(0), - reference_limit: z.number().int().min(1).max(500).default(100), - resource_offset: z.number().int().min(0).default(0), - resource_limit: z.number().int().min(1).max(500).default(100), - attribute_offset: z.number().int().min(0).default(0), - attribute_limit: z.number().int().min(1).max(500).default(100), - ...managedReadLimits, }); /** Exact caller boundary for execution-free metadata/signature/IL inspection. */ -export const managedMemberInputSchema = z.object({ - type_offset: z.number().int().min(0).default(0), - type_limit: z.number().int().min(1).max(500).default(100), - method_offset: z.number().int().min(0).default(0), - method_limit: z.number().int().min(1).max(500).default(100), - field_offset: z.number().int().min(0).default(0), - field_limit: z.number().int().min(1).max(500).default(100), - member_ref_offset: z.number().int().min(0).default(0), - member_ref_limit: z.number().int().min(1).max(500).default(100), - edge_offset: z.number().int().min(0).default(0), - edge_limit: z.number().int().min(1).max(1_000).default(250), - instruction_anchor_limit: z.number().int().min(0).max(500).default(100), - ...managedReadLimits, - max_method_body_bytes: z - .number() - .int() - .min(1) - .max(16_777_216) - .default(1_048_576), - max_method_instructions: z.number().int().min(1).max(100_000).default(10_000), -}); +export const managedMemberInputSchema = z.object({}); /** Exact caller boundary for execution-free managed/native boundary inspection. */ -export const managedNativeBoundaryInputSchema = z.object({ - module_ref_offset: z.number().int().min(0).default(0), - module_ref_limit: z.number().int().min(1).max(500).default(100), - import_offset: z.number().int().min(0).default(0), - import_limit: z.number().int().min(1).max(500).default(100), - implementation_offset: z.number().int().min(0).default(0), - implementation_limit: z.number().int().min(1).max(500).default(100), - ...managedReadLimits, -}); +export const managedNativeBoundaryInputSchema = z.object({}); const outputSchema = requireOutputSchema( managedOutputSchemas, @@ -98,7 +41,7 @@ export const MANAGED_TOOL_CONTRACTS = [ name: "inspect_managed_artifact", ...toolContractMetadata("inspect_managed_artifact"), description: - "Open and classify an explicit managed PE/CLI path, or inspect the active managed target, then inventory exact assembly/module identity, target framework evidence, references, resources, and custom attributes without loading or executing target code. Returns bounded pages and explicit partial or malformed coverage.", + "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.", kind: "managed-provider", inputSchema: managedArtifactInputSchema, outputSchema, @@ -113,14 +56,14 @@ export const MANAGED_TOOL_CONTRACTS = [ name: "inspect_managed_members", ...toolContractMetadata("inspect_managed_members"), description: - "Inspect bounded PE/CLI metadata members, signatures, raw CIL hashes, limited member-result-v1 decoded-instruction-tuple hashes, separately reported exception regions, call edges, and field-access anchors without loading or executing target code. Metadata tokens are reported as build-local coordinates bound to the artifact SHA-256 and MVID; the v1 tuple hash does not resolve them or fully commit control flow.", + "Inspect PE/CLI metadata members, signatures, raw CIL hashes, member-result-v1 decoded-instruction-tuple hashes, separately reported exception regions, call edges, and field-access anchors without loading or executing target code. Metadata tokens are reported as build-local coordinates bound to the artifact SHA-256 and MVID; the v1 tuple hash does not resolve them or fully commit control flow.", kind: "managed-provider", inputSchema: managedMemberInputSchema, outputSchema: memberOutputSchema, examples: [ { title: "Example inspect managed members request", - input: { method_limit: 25, edge_limit: 100 }, + input: {}, }, ], }, @@ -135,7 +78,7 @@ export const MANAGED_TOOL_CONTRACTS = [ examples: [ { title: "Example inspect managed/native boundary request", - input: { import_limit: 50, implementation_limit: 50 }, + input: {}, }, ], }, diff --git a/src/contracts/managedWorkflowExamples.ts b/src/contracts/managedWorkflowExamples.ts index 68070e00ee..a21a70acff 100644 --- a/src/contracts/managedWorkflowExamples.ts +++ b/src/contracts/managedWorkflowExamples.ts @@ -21,7 +21,6 @@ const emptyManagedMembers = ( sha256: string, mvid: string, ): ManagedMemberInspection => ({ - schema_version: 1, artifact: { path: `/examples/${sha256.slice(0, 8)}.dll`, sha256, @@ -47,29 +46,16 @@ const emptyManagedMembers = ( requires_artifact_sha256: sha256, requires_mvid: mvid, }, - types: emptyPage(100), - fields: emptyPage(100), - methods: emptyPage(100), - member_refs: emptyPage(100), - call_edges: emptyPage(250), - field_accesses: emptyPage(250), + types: [], + fields: [], + methods: [], + member_refs: [], + call_edges: [], + field_accesses: [], coverage: { state: "complete", issues: [] }, limitations: [], }); -const emptyPage = (limit: number) => { - const items: Item[] = []; - return { - items, - offset: 0, - limit, - total: 0, - returned: 0, - dropped: 0, - complete: true, - }; -}; - const evidence = (result: ManagedMemberInspection) => createEvidence(undefined, MANAGED_STATIC_EXAMPLE_PROVIDER, { operation: "inspect_managed_members", @@ -86,55 +72,50 @@ const runtimeMembers = (): ManagedMemberInspection => { ); return { ...result, - methods: { - ...result.methods, - items: [ - { - token: "0x06000001", - row_offset: 128, - declaring_type_token: "0x02000001", - declaring_type: "Example.Program", - name: "Main", - rva: 8192, - impl_flags: 0, - flags: 22, - signature: { - raw_length: 3, - raw_sha256: "3".repeat(64), - kind: "method", - parse_status: "decoded", - calling_convention: "default", - generic_parameter_count: 0, - parameter_count: 0, - return_type: "void", - parameter_types: [], - field_type: null, - issue: null, - }, - body: { - status: "present", - header_format: "tiny", - rva: 8192, - file_offset: 512, - max_stack: 8, - init_locals: false, - local_var_sig_token: null, - il_size: 1, - il_sha256: "4".repeat(64), - normalized_il_sha256: "5".repeat(64), - instruction_count: 1, - decoded_instruction_count: 1, - truncated_instructions: 0, - opcode_counts: { ret: 1 }, - anchors: [], - exception_regions: [], - issue: null, - }, + methods: [ + { + token: "0x06000001", + row_offset: 128, + declaring_type_token: "0x02000001", + declaring_type: "Example.Program", + name: "Main", + rva: 8192, + impl_flags: 0, + flags: 22, + signature: { + raw_length: 3, + raw_sha256: "3".repeat(64), + kind: "method", + parse_status: "decoded", + calling_convention: "default", + generic_parameter_count: 0, + parameter_count: 0, + return_type: "void", + parameter_types: [], + field_type: null, + issue: null, }, - ], - total: 1, - returned: 1, - }, + body: { + status: "present", + header_format: "tiny", + rva: 8192, + file_offset: 512, + max_stack: 8, + init_locals: false, + local_var_sig_token: null, + il_size: 1, + il_sha256: "4".repeat(64), + normalized_il_sha256: "5".repeat(64), + instruction_count: 1, + decoded_instruction_count: 1, + truncated_instructions: 0, + opcode_counts: { ret: 1 }, + anchors: [], + exception_regions: [], + issue: null, + }, + }, + ], }; }; @@ -146,11 +127,6 @@ export const MANAGED_MEMBER_COMPARISON_EXAMPLE = { right: evidence( emptyManagedMembers("1".repeat(64), "ffeeddcc-bbaa-4988-9766-554433221100"), ), - limits: { - max_method_matches: 100, - max_field_matches: 50, - max_candidates: 25, - }, }; const runtimeExampleEvidence = evidence(runtimeMembers()); @@ -158,18 +134,10 @@ const runtimeExampleEvidence = evidence(runtimeMembers()); /** Minimal valid managed application graph projection request. */ export const MANAGED_APPLICATION_GRAPH_EXAMPLE = { managed_members: runtimeExampleEvidence, - limits: { - max_types: 100, - max_methods: 100, - max_fields: 100, - max_pinvoke_imports: 100, - max_native_implementations: 100, - }, }; const boundaryEvidence = () => { const result: ManagedNativeBoundaryInspection = { - schema_version: 1, artifact: { path: "/examples/ManagedInterop.exe", sha256: "6".repeat(64), @@ -204,51 +172,35 @@ const boundaryEvidence = () => { managed_native_header_rva: 0, managed_native_header_size: 0, }, - module_refs: { - items: [ - { - token: "0x1a000001", - row_offset: 256, - name: "nativehelper.dll", - }, - ], - offset: 0, - limit: 100, - total: 1, - returned: 1, - dropped: 0, - complete: true, - }, - pinvoke_imports: { - items: [ - { - token: "0x1c000001", - row_offset: 288, - mapping_flags: 0, - mapping_flags_hex: "0x0000", - member_token: "0x06000001", - member_kind: "method", - member_name: "OpenNative", - import_name: "open_native", - import_scope_token: "0x1a000001", - import_scope_name: "nativehelper.dll", - no_mangle: true, - char_set: "not-specified", - call_convention: "cdecl", - supports_last_error: false, - best_fit: "assembly-default", - throw_on_unmappable_char: "assembly-default", - verification: "managed-declaration-only", - }, - ], - offset: 0, - limit: 100, - total: 1, - returned: 1, - dropped: 0, - complete: true, - }, - native_implementations: emptyPage(100), + module_refs: [ + { + token: "0x1a000001", + row_offset: 256, + name: "nativehelper.dll", + }, + ], + pinvoke_imports: [ + { + token: "0x1c000001", + row_offset: 288, + mapping_flags: 0, + mapping_flags_hex: "0x0000", + member_token: "0x06000001", + member_kind: "method", + member_name: "OpenNative", + import_name: "open_native", + import_scope_token: "0x1a000001", + import_scope_name: "nativehelper.dll", + no_mangle: true, + char_set: "not-specified", + call_convention: "cdecl", + supports_last_error: false, + best_fit: "assembly-default", + throw_on_unmappable_char: "assembly-default", + verification: "managed-declaration-only", + }, + ], + native_implementations: [], summary: { module_ref_count: 1, pinvoke_import_count: 1, @@ -354,10 +306,6 @@ export const MANAGED_RECONSTRUCTION_IMPORT_EXAMPLE = { export const MANAGED_NATIVE_VERIFICATION_EXAMPLE = { managed_boundaries: boundaryEvidence(), native_observations: [nativeExportEvidence()], - limits: { - max_native_observations: 20, - max_candidates_per_import: 25, - }, }; /** Minimal valid managed runtime-correlation planning request. */ diff --git a/src/contracts/managedWorkflowToolContracts.ts b/src/contracts/managedWorkflowToolContracts.ts index b388506ea5..7e05987388 100644 --- a/src/contracts/managedWorkflowToolContracts.ts +++ b/src/contracts/managedWorkflowToolContracts.ts @@ -4,7 +4,6 @@ import { compareManagedMembersInputSchema } from "../domain/managedMemberCompari import { managedNativeVerificationInputSchema } from "../domain/managedNativeVerification.js"; import { managedReconstructionImportInputSchema } from "../domain/managedReconstruction.js"; import { managedRuntimeCorrelationInputSchema } from "../domain/managedRuntimeCorrelation.js"; -import { projectManagedApplicationGraphInputSchema } from "../domain/managedApplicationGraph.js"; import type { ToolContract } from "./toolContracts.js"; import { managedWorkflowOutputSchemas } from "./toolOutputSchemas.js"; import { @@ -36,7 +35,6 @@ export const compareManagedMembersReferenceInputSchema = z .strictObject({ left_evidence_id: managedEvidenceIdSchema, right_evidence_id: managedEvidenceIdSchema, - limits: compareManagedMembersInputSchema.shape.limits, unknown_registry_approved: compareManagedMembersInputSchema.shape.unknown_registry_approved, }) @@ -68,9 +66,7 @@ export const managedNativeVerificationReferenceInputSchema = z native_observation_evidence_ids: z .array(nativeObservationEvidenceIdSchema) .min(1) - .max(50) .describe("Unique session-owned native observation Evidence IDs"), - limits: managedNativeVerificationInputSchema.shape.limits, unknown_registry_approved: managedNativeVerificationInputSchema.shape.unknown_registry_approved, }) @@ -97,9 +93,7 @@ export const managedNativeVerificationReferenceInputSchema = z } }); -const managedApplicationGraphReferenceFacts = { - limits: projectManagedApplicationGraphInputSchema.shape.limits, -} as const; +const managedApplicationGraphReferenceFacts = {} as const; /** MCP references requiring at least one managed Evidence source. */ export const managedApplicationGraphReferenceInputSchema = z @@ -176,7 +170,6 @@ export const MANAGED_WORKFLOW_TOOL_CONTRACTS = [ left_evidence_id: MANAGED_MEMBER_COMPARISON_EXAMPLE.left.evidence_id, right_evidence_id: MANAGED_MEMBER_COMPARISON_EXAMPLE.right.evidence_id, - limits: MANAGED_MEMBER_COMPARISON_EXAMPLE.limits, }, }, ], @@ -199,7 +192,6 @@ export const MANAGED_WORKFLOW_TOOL_CONTRACTS = [ MANAGED_NATIVE_VERIFICATION_EXAMPLE.native_observations.map( ({ evidence_id: evidenceId }) => evidenceId, ), - limits: MANAGED_NATIVE_VERIFICATION_EXAMPLE.limits, }, }, ], @@ -262,7 +254,6 @@ export const MANAGED_WORKFLOW_TOOL_CONTRACTS = [ input: { managed_members_evidence_id: MANAGED_APPLICATION_GRAPH_EXAMPLE.managed_members.evidence_id, - limits: MANAGED_APPLICATION_GRAPH_EXAMPLE.limits, }, }, ], diff --git a/src/contracts/nativeToolContracts.ts b/src/contracts/nativeToolContracts.ts index b9bd216458..0823ee0bfd 100644 --- a/src/contracts/nativeToolContracts.ts +++ b/src/contracts/nativeToolContracts.ts @@ -54,11 +54,7 @@ export const NATIVE_TOOL_CONTRACTS = [ "inspect_plist", "Parse a plist at a bounded relative path beneath the active artifact container. Symlink and traversal escapes are rejected; output is normalized JSON rather than plutil text.", z.object({ - relative_path: z - .string() - .min(1) - .max(1_024) - .default("Contents/Info.plist"), + relative_path: z.string().min(1).default("Contents/Info.plist"), }), ), native( @@ -70,7 +66,7 @@ export const NATIVE_TOOL_CONTRACTS = [ "demangle_swift", "Demangle an ordered bounded batch of Swift symbols without requiring Hopper. Each input returns demangled, unchanged, or invalid status.", z.object({ - symbols: z.array(z.string().min(1).max(4_096)).min(1).max(500), + symbols: z.array(z.string().min(1)).min(1), }), ), ] as const satisfies readonly ToolContract[]; diff --git a/src/contracts/promptContracts.ts b/src/contracts/promptContracts.ts index d10a2f145f..86f3cc30c2 100644 --- a/src/contracts/promptContracts.ts +++ b/src/contracts/promptContracts.ts @@ -149,9 +149,9 @@ export const PROMPT_CONTRACTS = [ "Build function dossiers and corroborate references and call relationships. Keep indirect or truncated paths unknown.", }, { - tools: ["snapshot_evidence_bundle", "record_unknown"], + tools: ["get_evidence_bundle", "record_unknown"], instruction: - "Snapshot the canonical bundle, copy its opaque URI unchanged, and read that resource before citing retained Evidence IDs. Record residual unknowns only after separate explicit approval for registry mutation.", + "Snapshot the current Evidence bundle when a durable export is useful, then cite the Evidence IDs you used. Record residual unknowns when the evidence does not settle a material question.", }, ], }, @@ -198,9 +198,9 @@ export const PROMPT_CONTRACTS = [ "For JavaScript/Electron versions, reconstruct each approved artifact independently, optionally reconcile separately retained passive runtime Evidence, then compare authenticated graphs with unique-only identity tiers. Keep ambiguous and incomplete matches unknown.", }, { - tools: ["snapshot_evidence_bundle", "compare_artifacts"], + tools: ["get_evidence_bundle", "compare_artifacts"], instruction: - "Snapshot and read the canonical bundle through its exact resource URI, resolve any supplied manifest IDs to retained inventory Evidence, validate graph commitments, then compare the complete left and right Evidence page sets.", + "Read the complete session bundle inline, resolve supplied manifest IDs to inventory Evidence, validate graph commitments, then compare the complete left and right Evidence page sets.", }, { tools: ["open_binary", "analyze_function", "compare_functions"], @@ -241,9 +241,9 @@ export const PROMPT_CONTRACTS = [ }, steps: [ { - tools: ["snapshot_evidence_bundle"], + tools: ["get_evidence_bundle"], instruction: - "Snapshot the current canonical bundle, copy its opaque URI unchanged, read the resource, and verify that every selected comparison Evidence ID is present and compatible with the intended claim.", + "Check that every selected comparison Evidence ID is present and compatible with the intended claim.", }, { tools: [ @@ -270,7 +270,7 @@ export const PROMPT_CONTRACTS = [ name: "trace_crash", title: "Trace a crash", description: - "Correlate a crash symptom with bounded static call and reference evidence plus optional approved Process Capture v4 observations.", + "Correlate a crash symptom with bounded static call and reference evidence plus optional approved process capture observations.", objective: "Localize plausible crash paths while separating observed runtime failure, static reachability, inferred causality, and unobserved paths.", arguments: { @@ -286,7 +286,7 @@ export const PROMPT_CONTRACTS = [ "procedure", ), capture_evidence_id: optional( - "Retained Process Capture v4 Evidence for the crash", + "Retained process capture Evidence for the crash", "capture", ), }, @@ -313,12 +313,12 @@ export const PROMPT_CONTRACTS = [ }, { tools: [ - "snapshot_evidence_bundle", + "get_evidence_bundle", "capture_process_scenario", "correlate_static_and_runtime", ], instruction: - "Snapshot and read retained Evidence through the exact resource URI. Reuse a retained capture when supplied. Otherwise capture only after operator policy and per-call approval, then correlate through explicit hypotheses rather than timing or name coincidence.", + "Read retained Evidence inline. Reuse a retained capture when supplied. Otherwise capture only after operator policy and per-call approval, then correlate through explicit hypotheses rather than timing or name coincidence.", }, { tools: ["record_unknown"], @@ -354,9 +354,9 @@ export const PROMPT_CONTRACTS = [ "List current heads first and select only active, session-owned unknown IDs. Preserve their exact revision and requirements.", }, { - tools: ["snapshot_evidence_bundle", "verify_unknown_resolution"], + tools: ["get_evidence_bundle", "verify_unknown_resolution"], instruction: - "Snapshot and read the canonical bundle through its exact resource URI, inspect cited supporting, contradicting, and mutation Evidence, then validate any resolved head against bundle integrity and authority requirements.", + "Read the canonical bundle inline, inspect cited supporting, contradicting, and mutation Evidence, then validate any resolved head against bundle integrity and authority requirements.", }, { tools: ["update_unknown"], @@ -374,7 +374,7 @@ export const PROMPT_CONTRACTS = [ name: "prepare_bounded_process_capture", title: "Prepare a bounded process capture", description: - "Design an approval-gated Process Capture v4 scenario with exact executable, filesystem, environment, network, replay, timeout, and cleanup boundaries.", + "Design an approval-gated process capture scenario with exact executable, filesystem, environment, network, replay, timeout, and cleanup boundaries.", objective: "Prepare and, only after authorization, run the smallest controlled process experiment that can answer the stated behavioral question.", arguments: { @@ -388,7 +388,7 @@ export const PROMPT_CONTRACTS = [ "Absolute working directory requested for the scenario", ), prior_capture_evidence_id: optional( - "Retained Process Capture v4 Evidence to compare or refine", + "Retained process capture Evidence to compare or refine", "capture", ), }, @@ -399,9 +399,9 @@ export const PROMPT_CONTRACTS = [ "Inspect capture capability, declared effects, and limits before proposing execution. An unavailable capability is not permission to widen policy.", }, { - tools: ["snapshot_evidence_bundle"], + tools: ["get_evidence_bundle"], instruction: - "Snapshot and read the canonical bundle through its exact resource URI, then review any prior capture for unanswered dimensions, truncation, scenario commitments, and descendant settlement before designing a repeat.", + "Read the canonical bundle inline, then review any prior capture for unanswered dimensions, truncation, scenario commitments, and descendant settlement before designing a repeat.", }, { tools: ["capture_process_scenario"], @@ -411,7 +411,7 @@ export const PROMPT_CONTRACTS = [ { tools: ["compare_process_captures"], instruction: - "When a prior compatible capture exists, compare complete Process Capture v4 observations under recorded normalization and freshness requirements.", + "When a prior compatible capture exists, compare complete process capture observations under recorded normalization and freshness requirements.", }, { tools: ["record_unknown"], diff --git a/src/contracts/providerSelection.ts b/src/contracts/providerSelection.ts index 9d281f3986..41d0a18046 100644 --- a/src/contracts/providerSelection.ts +++ b/src/contracts/providerSelection.ts @@ -4,7 +4,6 @@ import { z } from "zod"; export const analysisProviderIdSchema = z .string() .min(1) - .max(64) .regex(/^[a-z][a-z0-9-]*$/u) .refine((value) => value !== "auto", { message: "auto is reserved for provider selection", diff --git a/src/contracts/reconstructionReadinessExample.ts b/src/contracts/reconstructionReadinessExample.ts index 7780f27a28..41420d76ab 100644 --- a/src/contracts/reconstructionReadinessExample.ts +++ b/src/contracts/reconstructionReadinessExample.ts @@ -72,7 +72,6 @@ const EVIDENCE_STATES = [ /** Complete synthetic input shared by docs, tests, CLI, MCP, and verifier. */ export const RECONSTRUCTION_READINESS_EXAMPLE: ReconstructionReadinessInput = { - schema_version: 1, identity: { cli_version: "2.4.0", server_version: "2.4.0", @@ -220,15 +219,11 @@ export const RECONSTRUCTION_READINESS_EXAMPLE: ReconstructionReadinessInput = { ], obligation_ledger: { schema: "ReconstructionObligationLedger", - schema_version: 1, ledger_id: `rol_${HASH}`, closure_digest: HASH, status: "ready", coverage: { status: "complete", - truncated: false, - omitted_count: 0, - max_obligations: 100, }, summary: { total: 1, diff --git a/src/contracts/sessionStatusContract.ts b/src/contracts/sessionStatusContract.ts index 95aabec676..c19c73a3b9 100644 --- a/src/contracts/sessionStatusContract.ts +++ b/src/contracts/sessionStatusContract.ts @@ -1,26 +1,7 @@ import { z } from "zod"; -import { TOOL_KINDS } from "./toolContractTypes.js"; - -/** Caller observations and projection controls for binary_session. */ +/** Optional expectations used to compare the live session with its caller. */ export const binarySessionInputSchema = z.object({ - detail: z - .enum(["summary", "capabilities", "full"]) - .default("summary") - .describe( - "summary returns routing state; capabilities returns one filtered tool-availability page; full returns complete diagnostics only when required", - ), - capability_family: z - .enum(TOOL_KINDS) - .optional() - .describe("Optional tool family for detail=capabilities"), - cursor: z - .number() - .int() - .min(0) - .default(0) - .describe("Zero-based capability cursor for detail=capabilities"), - limit: z.number().int().min(1).max(100).default(25), expected_package_version: z.string().min(1).optional(), expected_catalog_digest: z .string() diff --git a/src/contracts/sessionToolSchemas.ts b/src/contracts/sessionToolSchemas.ts index 58777718fe..0ba2a4918b 100644 --- a/src/contracts/sessionToolSchemas.ts +++ b/src/contracts/sessionToolSchemas.ts @@ -19,13 +19,8 @@ import { } from "./sessionLifecycleInputs.js"; import { binarySessionInputSchema } from "./sessionStatusContract.js"; -/** Retain the current canonical Evidence bundle as a session resource. */ -export const snapshotEvidenceBundleInputSchema = z.strictObject({}); - -/** Release one session-retained immutable Evidence bundle. */ -export const releaseEvidenceBundleInputSchema = z.strictObject({ - bundle_digest: z.string().regex(/^[a-f0-9]{64}$/u), -}); +/** Return the current canonical Evidence bundle inline. */ +export const getEvidenceBundleInputSchema = z.strictObject({}); /** Optional document selection for volatile navigation context. */ export const navigationContextInputSchema = z.strictObject({ @@ -61,9 +56,7 @@ export const listUnknownsInputSchema = z.strictObject({ .enum(["open", "investigating", "blocked", "contradicted", "resolved"]) .optional(), severity: z.enum(["low", "medium", "high", "critical"]).optional(), - domain: z.string().trim().min(1).max(100).optional(), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(500).default(100), + domain: z.string().trim().min(1).optional(), }); /** Exact residual-unknown identity to revalidate. */ diff --git a/src/contracts/toolContractExamples.ts b/src/contracts/toolContractExamples.ts index 1a7ec1cb49..b9c618e6e0 100644 --- a/src/contracts/toolContractExamples.ts +++ b/src/contracts/toolContractExamples.ts @@ -43,7 +43,6 @@ export const TOOL_EXAMPLE_OVERRIDES: Readonly< export_evidence_bundle: { path: "/tmp/evidence.json" }, inspect_address_context: { address: "0x1000" }, import_evidence_bundle: { path: "evidence.json" }, - release_evidence_bundle: { bundle_digest: "a".repeat(64) }, capture_process_scenario: { approved: true, executable: "/usr/bin/true", @@ -59,8 +58,8 @@ export const TOOL_EXAMPLE_OVERRIDES: Readonly< right_evidence_ids: [ARTIFACT_COMPARISON_EXAMPLE.right.evidence_id], }, compare_functions: { - left_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.left.evidence_id], - right_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.right.evidence_id], + left_evidence_id: FUNCTION_COMPARISON_EXAMPLE.left.evidence_id, + right_evidence_id: FUNCTION_COMPARISON_EXAMPLE.right.evidence_id, }, compare_bundles: { left_bundle_path: "/approved/left-evidence.json", diff --git a/src/contracts/toolContractHelpers.ts b/src/contracts/toolContractHelpers.ts index 9298417f1b..76a72118e5 100644 --- a/src/contracts/toolContractHelpers.ts +++ b/src/contracts/toolContractHelpers.ts @@ -12,11 +12,6 @@ export const address = z ); export const optionalAddress = address.optional(); export const procedure = z.string().describe("The procedure name or address"); -export const pagination = { - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(500).default(100), -}; - const exampleInputSchema = z.record(z.string(), jsonValueSchema); export const examplesFor = ( diff --git a/src/contracts/toolContracts.test.ts b/src/contracts/toolContracts.test.ts index 7ab352feb8..2d21dc8b13 100644 --- a/src/contracts/toolContracts.test.ts +++ b/src/contracts/toolContracts.test.ts @@ -87,8 +87,7 @@ describe("tool contract inventory", () => { "update_unknown", "verify_unknown_resolution", "run_replay_machine", - "snapshot_evidence_bundle", - "release_evidence_bundle", + "get_evidence_bundle", "get_navigation_context", "inspect_address_context", ]); @@ -96,27 +95,4 @@ describe("tool contract inventory", () => { TOOL_CONTRACTS.length, ); }); - - it("retains documented enhanced-tool limits at the input boundary", () => { - const batch = ENHANCED_TOOL_CONTRACTS.find( - ({ name }) => name === "batch_decompile", - ); - const graph = ENHANCED_TOOL_CONTRACTS.find( - ({ name }) => name === "get_call_graph", - ); - - expect( - batch?.inputSchema.safeParse({ - addresses: Array.from({ length: 21 }, () => "0x1"), - }).success, - ).toBe(false); - expect( - graph?.inputSchema.safeParse({ address: "0x1", depth: 6 }).success, - ).toBe(false); - expect(graph?.inputSchema.parse({ address: "0x1" })).toEqual({ - address: "0x1", - depth: 2, - direction: "forward", - }); - }); }); diff --git a/src/contracts/toolContracts.ts b/src/contracts/toolContracts.ts index 3a8acc5474..a4117e11a6 100644 --- a/src/contracts/toolContracts.ts +++ b/src/contracts/toolContracts.ts @@ -31,9 +31,8 @@ import { processScenarioSchema, reconstructionVerificationInputSchema, recordUnknownInputSchema, - releaseEvidenceBundleInputSchema, replayMachineRunInputSchema, - snapshotEvidenceBundleInputSchema, + getEvidenceBundleInputSchema, staticRuntimeCorrelationInputSchema, updateUnknownInputSchema, verifyUnknownResolutionInputSchema, @@ -43,7 +42,6 @@ import { document, examplesFor, optionalAddress, - pagination, procedure, } from "./toolContractHelpers.js"; import type { ToolContract } from "./toolContractTypes.js"; @@ -60,8 +58,7 @@ export { listUnknownsInputSchema, navigationContextInputSchema, processComparisonInputSchema, - releaseEvidenceBundleInputSchema, - snapshotEvidenceBundleInputSchema, + getEvidenceBundleInputSchema, verifyUnknownResolutionInputSchema, } from "./sessionToolSchemas.js"; @@ -170,13 +167,13 @@ export const OFFICIAL_TOOL_CONTRACTS = [ ), official( "list_names", - "Page through analyzed memory and external symbols as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available; follow next_offset before claiming exhaustive coverage.", - z.object({ document, address: optionalAddress, ...pagination }), + "List every analyzed memory and external symbol as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available.", + z.object({ document, address: optionalAddress }), ), official( "list_procedures", - "Page through analyzed procedures as address/value pairs after provider analysis. Ghidra metadata distinguishes thunks and external functions; follow next_offset for exhaustive coverage and use returned addresses in later function operations.", - z.object({ document, ...pagination }), + "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.", + z.object({ document }), ), official( "list_segments", @@ -185,8 +182,8 @@ export const OFFICIAL_TOOL_CONTRACTS = [ ), official( "list_strings", - "Page through provider-defined strings, or filter to one address, as address/value pairs. Ghidra reports charset, missing-terminator status, byte length, and explicit value truncation; follow next_offset for exhaustive results.", - z.object({ document, address: optionalAddress, ...pagination }), + "List every provider-defined string, or filter to one address, as address/value pairs. Ghidra reports charset, missing-terminator status, byte length, and explicit value truncation.", + z.object({ document, address: optionalAddress }), ), official( "next_address", @@ -225,7 +222,7 @@ export const OFFICIAL_TOOL_CONTRACTS = [ ), official( "read_function_instructions", - "Read one offset-paginated window of raw instructions for an analyzed procedure without decompilation, caller discovery, or whole-program string/name scans. Use this fast path for instruction-level orientation; follow next_offset when truncated.", + "Read every raw instruction for an analyzed procedure without decompilation, caller discovery, or whole-program string/name scans. Instruction text is provider-specific.", functionInstructionInputSchema, ), ...HOPPER_MEMORY_TOOL_DEFINITIONS.map(({ name, description, inputSchema }) => @@ -233,13 +230,10 @@ export const OFFICIAL_TOOL_CONTRACTS = [ ), official( "procedure_references", - "Return a bounded set of raw incoming or outgoing reference edges for one procedure. Endpoint procedures are resolved only from provider containment; Ghidra preserves observed reference kinds while providers without kind authority mark them unavailable.", + "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.", z.object({ procedure, direction: z.enum(["incoming", "outgoing"]).default("outgoing"), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(500).default(100), - max_instructions: z.number().int().min(1).max(5000).default(500), document, }), ), @@ -255,12 +249,12 @@ export const OFFICIAL_TOOL_CONTRACTS = [ ), official( "search_procedures", - "Search analyzed procedure names using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic and offset-paginated.", + "Search every analyzed procedure name using literal matching by default or regex when requested. Results are deterministic and complete.", z.object(analysisSearchInput), ), official( "search_strings", - "Search analyzed strings using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic, offset-paginated, and explicitly truncated.", + "Search every analyzed string using literal matching by default or regex when requested. Results are deterministic and complete.", z.object(analysisSearchInput), ), official( @@ -312,32 +306,32 @@ export type OfficialToolName = (typeof OFFICIAL_TOOL_CONTRACTS)[number]["name"]; export const ENHANCED_TOOL_CONTRACTS = [ enhanced( "swift_classes", - "Discover legacy-mangled Swift class procedures after exhaustively paging analyzed procedures. Returns at most 100 entries and scans at most 5,000 symbols; use analyze_swift_types for other Swift kinds.", + "Discover legacy-mangled Swift class procedures by scanning analyzed procedures; returns every matching entry. Use analyze_swift_types for other Swift kinds.", enhancedInputSchemas.swift_classes, ), enhanced( "get_objc_classes", - "Discover and deduplicate Objective-C class labels after exhaustively paging names, optionally filtering by literal substring. Returns at most 100 classes; inspect matching metadata and references next.", + "Discover and deduplicate every Objective-C class label, optionally filtering by literal substring; inspect matching metadata and references next.", enhancedInputSchemas.get_objc_classes, ), enhanced( "get_objc_protocols", - "Discover and deduplicate Objective-C and Swift protocol labels after exhaustively paging names. Returns at most 100 entries; use xrefs or analyze_function to connect a protocol to implementations.", + "Discover and deduplicate every Objective-C and Swift protocol label; use xrefs or analyze_function to connect a protocol to implementations.", enhancedInputSchemas.get_objc_protocols, ), enhanced( "batch_decompile", - "Decompile up to 20 explicit procedure symbols or addresses concurrently. Returns ordered per-item ok/error variants and aggregate counts; use analyze_function for a richer single-function dossier.", + "Decompile each explicit procedure symbol or address concurrently. Returns ordered per-item ok/error variants and aggregate counts; use analyze_function for a richer single-function dossier.", enhancedInputSchemas.batch_decompile, ), enhanced( "get_call_graph", - "Traverse the bound provider's caller or callee relationships from one symbol or address for at most five levels. Every node has an ok/error status and failures use safe typed projections; unresolved indirect calls may be missing and results are not a whole-program CFG.", + "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.", enhancedInputSchemas.get_call_graph, ), enhanced( "analyze_swift_types", - "Categorize exhaustively paged procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols. Scans at most 5,000 names and returns at most 50 entries per category.", + "Categorize all analyzed procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols.", enhancedInputSchemas.analyze_swift_types, ), enhanced( @@ -347,23 +341,23 @@ export const ENHANCED_TOOL_CONTRACTS = [ ), enhanced( "binary_overview", - "Use immediately after opening a target to summarize document, exhaustive procedure/string counts, and a bounded segment sample. detail controls segment fields and limit controls only the returned segment sample.", + "Use immediately after opening a target to summarize the document, every segment with its length, and exhaustive procedure/string counts.", enhancedInputSchemas.binary_overview, ), ...FUNCTION_WORKFLOW_TOOL_CONTRACTS, enhanced( "trace_feature", - "Trace a bounded literal feature query through matching strings and procedures, xrefs, and truthful containing-procedure resolution. Returns the operation budget, truncation, and residual unknowns; unknown_registry_approved: true records them durably without inferring reference kinds.", + "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; unknown_registry_approved: true records residual unknowns without inferring reference kinds.", enhancedInputSchemas.trace_feature, ), enhanced( "find_code_for_string", - "Resolve one literal string query to bounded analyzed string entries, xrefs, and truthful containing-procedure candidates. Returns an Evidence ID, exact operation budget, truncation, and residual unknowns; it never infers reference kinds or runtime reachability.", + "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 a deterministic bounded caller or callee path from one exact procedure address, optionally stopping at a goal. Returns visited nodes, direct-call edges, one shortest traversal path, failures, frontier, consumed limits, an Evidence ID, and explicit residual unknowns without claiming unresolved indirect calls are absent.", + "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.", enhancedInputSchemas.trace_call_path, ), ] as const satisfies readonly ToolContract[]; @@ -388,12 +382,12 @@ export const SESSION_TOOL_CONTRACTS = [ ), session( "binary_session", - "Report compact target, provider, and alignment state without starting analysis. The default summary is the routing check agents should use; detail=capabilities returns one family-filtered availability page, while detail=full is reserved for complete provider diagnostics.", + "Report the complete current target, provider, capability availability, client-feature, analysis, and server-identity status without starting analysis.", binarySessionInputSchema, ), session( "export_evidence_bundle", - "Atomically write the session's deterministic Evidence v2 bundle beneath an operator-approved root. Existing files require overwrite: true; records and manifests use canonical byte-stable ordering. For an in-session read, use snapshot_evidence_bundle and read its exact resource URI instead.", + "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.", exportEvidenceBundleInputSchema, ), session( @@ -403,12 +397,12 @@ export const SESSION_TOOL_CONTRACTS = [ ), session( "capture_process_scenario", - "Run one bounded process under a PTY using operator-approved executable and working roots. Produces Process Capture v4; legacy v3 captures cannot be upgraded and must be recaptured with this tool. Requires approved: true; unknown_registry_approved: true separately records capture residuals. Captures raw and xterm-rendered terminal frames, scripted interactions, lifecycle filesystem checkpoints, process ownership, declarative command shims, and loopback replay. Disabled unless operator policy enables it; not a security sandbox.", + "Run one bounded process under a PTY using operator-approved executable and working roots. Produces process capture Evidence. Requires approved: true; unknown_registry_approved: true separately records capture residuals. Captures raw and xterm-rendered terminal frames, scripted interactions, lifecycle filesystem checkpoints, process ownership, declarative command shims, and loopback replay. Disabled unless operator policy enables it; not a security sandbox.", processScenarioSchema, ), session( "compare_process_captures", - "Compare two compatible Process Capture v4 observations across terminal, interaction, lifecycle, process, filesystem, command-shim, HTTP, and WebSocket evidence. Optional trace_spec validates exact events against an explicit partial order or finite trace language; concurrency is never inferred from timestamps or broad sorting. Missing, journal-free, or truncated observations are never treated as equivalent.", + "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.", processComparisonInputSchema, ), session( @@ -433,7 +427,7 @@ export const SESSION_TOOL_CONTRACTS = [ ), session( "build_call_path", - "Build bounded shortest-first direct-callee paths from explicit analyze_function Evidence groups using exact canonical addresses. Missing dossiers, incomplete callee pages, provider mixing, and depth frontiers remain unknown; every node and edge cites source Evidence.", + "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.", callPathInputSchema, ), session( @@ -448,7 +442,7 @@ export const SESSION_TOOL_CONTRACTS = [ ), session( "list_unknowns", - "List current residual-unknown heads in deterministic ID order, with optional exact status, severity, and domain filters. Pages default to 100 items; while has_more is true, pass next_offset as offset and continue until false. This is read-only; unresolved, contradicted, and non-truth dispositions remain distinct.", + "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.", listUnknownsInputSchema, ), session( @@ -472,14 +466,9 @@ export const SESSION_TOOL_CONTRACTS = [ replayMachineRunInputSchema, ), session( - "snapshot_evidence_bundle", - "Retain the current canonical Evidence v2 bundle as an immutable session resource. Returns a compact digest summary and exact opaque URI; copy that URI unchanged and call MCP resources/read (Codex: read_mcp_resource) for the full bundle. Repeating an unchanged snapshot is idempotent.", - snapshotEvidenceBundleInputSchema, - ), - session( - "release_evidence_bundle", - "Release one immutable session-retained Evidence v2 bundle by exact digest. This is the recovery operation when bounded bundle retention is exhausted; releasing an unknown digest is idempotent and reports released: false.", - releaseEvidenceBundleInputSchema, + "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.", + getEvidenceBundleInputSchema, ), session( "get_navigation_context", diff --git a/src/contracts/toolEffects.ts b/src/contracts/toolEffects.ts index 86c6fe3a09..c94e4a37a2 100644 --- a/src/contracts/toolEffects.ts +++ b/src/contracts/toolEffects.ts @@ -182,11 +182,7 @@ export const TOOL_EFFECTS: Readonly> = { writesFilesystem: true, mayDiscardData: true, }), - snapshot_evidence_bundle: effects({ mutatesSession: true }), - release_evidence_bundle: effects({ - mutatesSession: true, - mayDiscardData: true, - }), + get_evidence_bundle: effects(), get_navigation_context: effects({ mutatesSession: true }), inspect_address_context: effects({ mutatesSession: true }), import_evidence_bundle: effects({ mutatesSession: true }), diff --git a/src/contracts/toolOutputSchemaGroups.ts b/src/contracts/toolOutputSchemaGroups.ts index 9065e529f3..a4a53be690 100644 --- a/src/contracts/toolOutputSchemaGroups.ts +++ b/src/contracts/toolOutputSchemaGroups.ts @@ -1,11 +1,12 @@ import { z } from "zod"; import { jsonValueSchema } from "../domain/jsonValue.js"; +import { residualUnknownSchema } from "../domain/residualUnknown.js"; +import { evidenceBundleSchema } from "../domain/evidenceBundle.js"; import { processCaptureComparisonSchema, processCaptureSchema, } from "../domain/processCapture.js"; -import { residualUnknownSchema } from "../domain/residualUnknown.js"; import { functionInstructionWindowSchema, referenceKindSchema, @@ -44,24 +45,18 @@ import { replayMachineRunOutputSchema } from "../domain/replayMachineRun.js"; import { analysisErrorProjectionSchema } from "./errorSchemas.js"; import { addressList, + addressedValue, addressedEntry, - analysisActivity, - bounded, containingProcedureResolution, - clientFeatureAvailabilitySchema, functionDossierOutput, graphNode, lifecycleResultOf, nullableText, - pageOutput, procedureIdentity, procedureInfoOutput, evidenceResultOf as resultOf, - searchPageOutput, segmentOutput, sessionProvider, - providerIdentity, - toolAvailability, symbolDiscoveryOutput, targetFormatSchema, targetKindSchema, @@ -95,10 +90,10 @@ export const officialOutputSchemas: Readonly> = { inline_comment: resultOf(nullableText), list_bookmarks: resultOf(z.array(addressedEntry)), list_documents: resultOf(z.array(z.string())), - list_names: resultOf(pageOutput), - list_procedures: resultOf(pageOutput), + list_names: resultOf(z.array(addressedValue)), + list_procedures: resultOf(z.array(addressedValue)), list_segments: segmentOutput, - list_strings: resultOf(pageOutput), + list_strings: resultOf(z.array(addressedValue)), next_address: resultOf(z.string()), prev_address: resultOf(z.string()), procedure_address: resultOf(z.string()), @@ -126,7 +121,7 @@ export const officialOutputSchemas: Readonly> = { z.object({ procedure: procedureIdentity, direction: z.enum(["incoming", "outgoing"]), - references: bounded( + references: z.array( z.object({ source_address: z.string(), target_address: z.string(), @@ -135,14 +130,16 @@ export const officialOutputSchemas: Readonly> = { kind: referenceKindSchema, }), ), - instructions_scanned: z.number().int().min(0), - instruction_scan_truncated: z.boolean(), }), ), procedure_pseudo_code: resultOf(nullableText), resolve_containing_procedure: resultOf(containingProcedureResolution), - search_procedures: resultOf(searchPageOutput), - search_strings: resultOf(searchPageOutput), + search_procedures: resultOf( + z.array(z.object({ address: z.string(), value: z.string() })), + ), + search_strings: resultOf( + z.array(z.object({ address: z.string(), value: z.string() })), + ), set_address_name: resultOf(z.boolean()), set_addresses_names: resultOf(z.record(z.string(), z.boolean())), set_bookmark: resultOf(z.boolean()), @@ -157,8 +154,6 @@ const literalTraceOutput = resultOf( z.object({ query: z.string(), search_mode: z.literal("literal"), - operations_used: z.number().int().min(0), - operation_budget: z.number().int().min(1), matches: z.array( z.object({ type: z.enum(["string", "procedure"]), @@ -204,13 +199,8 @@ const callPathTraceOutput = resultOf( error: analysisErrorProjectionSchema, }), ), - frontier: z.array(z.string()), - limits: z.object({ - max_depth: z.number().int().min(1), - max_nodes: z.number().int().min(1), - max_operations: z.number().int().min(1), + traversal: z.object({ nodes_visited: z.number().int().min(1), - operations_used: z.number().int().min(0), }), truncated: z.boolean(), residual_unknowns: z.array(z.string()), @@ -275,13 +265,12 @@ export const enhancedOutputSchemas: Readonly> = { binary_overview: resultOf( z.object({ document: z.string(), - detail: z.enum(["concise", "detailed"]), segments: z.array( z.object({ name: z.string(), start: z.string(), end: z.string(), - length: z.number().min(0).optional(), + length: z.number().min(0), }), ), segment_count: z.number().int().min(0), @@ -364,51 +353,11 @@ export const sessionOutputSchemas: Readonly> = { ), binary_session: lifecycleResultOf( z.union([ - z.object({ - view: z.literal("summary"), - open: z.boolean(), - provider: providerIdentity, - active_provider: providerIdentity.nullable(), - target: z - .object({ - path: z.string(), - format: targetFormatSchema, - kind: targetKindSchema, - sha256: z.string().regex(/^[a-f0-9]{64}$/u), - architecture: z.enum(["x86", "x86_64", "arm", "arm64"]).nullable(), - }) - .nullable(), - alignment: z.object({ - state: z.enum(["aligned", "mcp_server_restart_required", "unknown"]), - reasons: z.array(z.string()), - remediation: z.string().nullable(), - }), - analysis_activity: analysisActivity, - recommended_actions: z.array(z.string()), - }), - z.object({ - view: z.literal("capabilities"), - open: z.boolean(), - provider: providerIdentity, - active_provider: providerIdentity.nullable(), - capability_family: z.string().nullable(), - capabilities: z.object({ - items: z.array(toolAvailability), - cursor: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(0), - next_cursor: z.number().int().min(0).nullable(), - has_more: z.boolean(), - }), - client_features: clientFeatureAvailabilitySchema, - }), z.union([ sessionProvider.extend({ - view: z.literal("full"), open: z.literal(false), }), sessionProvider.extend({ - view: z.literal("full"), open: z.literal(true), path: z.string(), format: targetFormatSchema, @@ -427,24 +376,7 @@ export const sessionOutputSchemas: Readonly> = { unknowns: z.number().int().min(0), }), ), - snapshot_evidence_bundle: lifecycleResultOf( - z.object({ - bundle_digest: z.string().regex(/^[a-f0-9]{64}$/u), - bundle_version: z.literal(2), - bytes: z.number().int().min(0), - records: z.number().int().min(0), - unknowns: z.number().int().min(0), - scope: z.literal("session"), - survives_session: z.literal(false), - bundle_uri: z.string().regex(/^rea:\/\/evidence-bundle\/[a-f0-9]{64}$/u), - }), - ), - release_evidence_bundle: lifecycleResultOf( - z.object({ - bundle_digest: z.string().regex(/^[a-f0-9]{64}$/u), - released: z.boolean(), - }), - ), + get_evidence_bundle: lifecycleResultOf(evidenceBundleSchema), get_navigation_context: lifecycleResultOf( z.object({ document: z.string(), @@ -481,17 +413,8 @@ export const sessionOutputSchemas: Readonly> = { verify_reconstruction: resultOf(reconstructionVerificationResultSchema), list_unknowns: lifecycleResultOf( z.object({ - items: z.array( - z.object({ - unknown: residualUnknownSchema, - uri: z.string().regex(/^rea:\/\/unknown\/unk_[a-f0-9]{64}$/u), - }), - ), - offset: z.number().int().min(0), - limit: z.number().int().min(1).max(500), + items: z.array(residualUnknownSchema), total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), }), ), record_unknown: lifecycleResultOf(residualUnknownSchema), diff --git a/src/contracts/toolOutputSchemaPrimitives.ts b/src/contracts/toolOutputSchemaPrimitives.ts index 09b3edde30..09284a6a60 100644 --- a/src/contracts/toolOutputSchemaPrimitives.ts +++ b/src/contracts/toolOutputSchemaPrimitives.ts @@ -7,18 +7,24 @@ import { functionDossierSchema, } from "../domain/hopperValues.js"; import { analysisProfileSchema } from "../domain/analysisProfile.js"; +import { evidenceEnvelopeSchema } from "../domain/evidence.js"; +import { jsonValueSchema } from "../domain/jsonValue.js"; import { PROVIDER_REJECTION_CODES, type ProviderRejectionCode, } from "./providerSelection.js"; import { analysisErrorProjectionSchema } from "./errorSchemas.js"; -/** Compact MCP result with an immutable link to complete session Evidence. */ +/** Inline result with its complete Evidence record. */ +export const inlineEvidenceRecordSchema = evidenceEnvelopeSchema.omit({ + normalized_result: true, +}); + export const evidenceResultOf = (schema: z.ZodType) => z.strictObject({ result: schema, evidence_id: z.string().regex(/^ev_[a-f0-9]{64}$/u), - evidence_uri: z.string().regex(/^rea:\/\/evidence\/ev_[a-f0-9]{64}$/u), + evidence: inlineEvidenceRecordSchema, }); const resultOf = evidenceResultOf; @@ -64,8 +70,6 @@ export const targetKindSchema = z.enum([ const providerCapabilityFacts = { operation: z.string(), - input_contract_version: z.number().int().min(1), - output_contract_version: z.number().int().min(1), pagination: z.enum(["none", "offset", "cursor"]), exhaustive: z.boolean(), effects: z.object({ @@ -122,7 +126,6 @@ const processLineageObservation = z.discriminatedUnion("status", [ z.object({ status: z.literal("verified"), observed_at: z.iso.datetime(), - schema_version: z.literal(1), ...processCoordinates, launcher_parent_pid: z.number().int().min(0), descendants: z.array( @@ -176,7 +179,7 @@ const providerRejectionCode: z.ZodType = z.enum( PROVIDER_REJECTION_CODES, ); -const providerDiagnostics = z.record(z.string(), z.json()); +const providerDiagnostics = z.record(z.string(), jsonValueSchema); const providerAvailability = z.discriminatedUnion("status", [ z.object({ @@ -312,74 +315,75 @@ export type ToolUnavailabilityReason = z.output< typeof toolUnavailabilityReason >; -export const sessionProvider = z.object({ - provider: providerIdentity, - providers: z.array(providerIdentity), - capabilities: z.array(providerCapability), - analysis_run: analysisRun, - analysis_activity: analysisActivity, - analysis_provider_binding: z - .object({ - provider: providerIdentity, - selection_source: z.enum([ - "request", - "environment", - "auto-single-candidate", - ]), - analysis_profile: analysisProfileSchema, - }) - .nullable(), - analysis_provider_candidates: z.array( - z.object({ - provider: providerIdentity, - availability: providerAvailability, - target_support: providerTargetSupport, - selected: z.boolean(), - capabilities: z.array(providerCapability), +export const sessionProvider = z + .object({ + provider: providerIdentity, + providers: z.array(providerIdentity), + capabilities: z.array(providerCapability), + analysis_run: analysisRun, + analysis_activity: analysisActivity, + analysis_provider_binding: z + .object({ + provider: providerIdentity, + selection_source: z.enum([ + "request", + "environment", + "auto-single-candidate", + ]), + analysis_profile: analysisProfileSchema, + }) + .nullable(), + analysis_provider_candidates: z.array( + z.object({ + provider: providerIdentity, + availability: providerAvailability, + target_support: providerTargetSupport, + selected: z.boolean(), + capabilities: z.array(providerCapability), + }), + ), + tool_availability: z.array(toolAvailability), + client_features: z.object({ + elicitation_form: z.boolean(), + elicitation_url: z.boolean(), + roots: z.boolean(), + sampling: z.boolean(), }), - ), - tool_availability: z.array(toolAvailability), - client_features: z.object({ - elicitation_form: z.boolean(), - elicitation_url: z.boolean(), - roots: z.boolean(), - sampling: z.boolean(), - }), - server_identity: z.object({ - package: z.object({ - name: z.string(), - version: z.string(), - root_path: z.string(), - build_commit: z.string().nullable(), + server_identity: z.object({ + package: z.object({ + name: z.string(), + version: z.string(), + root_path: z.string(), + build_commit: z.string().nullable(), + }), + server: z.object({ + name: z.string(), + version: z.string(), + started_at: z.string(), + command_path: z.string(), + }), + sdk: z.object({ + server: z.string(), + client_test: z.string(), + core: z.string(), + }), + negotiated_protocol_version: z.string().nullable(), + client: z.object({ name: z.string(), version: z.string() }).nullable(), + skill: z.object({ name: z.string(), expected_version: z.string() }), + catalog: z.record(z.string(), z.json()), + protocol_features: z.object({ + progress: z.boolean(), + cancellation: z.boolean(), + elicitation: z.boolean(), + }), + alignment: z.object({ + state: z.enum(["aligned", "mcp_server_restart_required", "unknown"]), + reasons: z.array(z.string()), + remediation: z.string().nullable(), + }), }), - server: z.object({ - name: z.string(), - version: z.string(), - started_at: z.string(), - command_path: z.string(), - }), - sdk: z.object({ - server: z.string(), - client_test: z.string(), - core: z.string(), - }), - negotiated_protocol_version: z.string().nullable(), - client: z.object({ name: z.string(), version: z.string() }).nullable(), - skill: z.object({ name: z.string(), expected_version: z.string() }), - catalog: z.record(z.string(), z.json()), - protocol_features: z.object({ - progress: z.boolean(), - cancellation: z.boolean(), - evidence_resources: z.boolean(), - elicitation: z.boolean(), - }), - alignment: z.object({ - state: z.enum(["aligned", "mcp_server_restart_required", "unknown"]), - reasons: z.array(z.string()), - remediation: z.string().nullable(), - }), - }), -}); + }) + .passthrough(); export const nullableText = z.string().nullable(); export const addressList = z.array(z.string()); @@ -434,10 +438,9 @@ export const bounded = (item: z.ZodType) => { ]); }; -const addressedValue = z.object({ +export const addressedValue = z.object({ address: z.string(), value: z.string(), - value_truncated: z.boolean().optional(), symbol: z .object({ primary: z.boolean(), @@ -463,25 +466,6 @@ const addressedValue = z.object({ .optional(), }); -export const pageOutput = z.object({ - items: z.array(addressedValue), - offset: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), -}); - -export const searchPageOutput = pageOutput.extend({ - items: z.array( - z.object({ - address: z.string(), - value: z.string(), - value_truncated: z.boolean(), - }), - ), -}); - const memoryRegionOutput = z.object({ name: z.string(), start: z.string(), diff --git a/src/contracts/toolSchemaMetadata.ts b/src/contracts/toolSchemaMetadata.ts index 025f05d57d..864532f447 100644 --- a/src/contracts/toolSchemaMetadata.ts +++ b/src/contracts/toolSchemaMetadata.ts @@ -14,14 +14,11 @@ const PROPERTY_DESCRIPTIONS: Readonly> = { comment: "Exact analyst comment text to write.", comparisons: "Validated comparison Evidence records to aggregate.", coverage: "Exact reconstruction-coverage commitment to verify.", - detail: "Requested response detail level.", direction: "Direction in which to traverse or compare relationships.", document: "Exact provider document or program identity.", error: "Structured, caller-actionable error when the operation fails.", evidence: "Evidence v2 record produced by this operation.", evidence_id: "Stable identifier of the recorded Evidence v2 observation.", - evidence_uri: - "Session resource URI for the recorded Evidence v2 observation.", executable: "Approved absolute path of the executable to run.", format: "Declared input artifact format.", name: "Exact name used by this operation.", @@ -42,7 +39,6 @@ const PROPERTY_DESCRIPTIONS: Readonly> = { provider_id: "Exact deep-analysis provider ID, or automatic selection when omitted.", right: "Right-hand input used for comparison or differential execution.", - schema_version: "Version of this structured result schema.", source_evidence: "Evidence records supporting the prepared source transformation.", status: "Current lifecycle or verification status.", diff --git a/src/domain/analysisErrorPresentation.ts b/src/domain/analysisErrorPresentation.ts index a8885253c1..713276fb36 100644 --- a/src/domain/analysisErrorPresentation.ts +++ b/src/domain/analysisErrorPresentation.ts @@ -8,6 +8,9 @@ import { EvidenceIntegrityError, EvidenceLimitError, HopperRemoteError, + HopperProcessError, + HopperStartError, + HopperTimeoutError, InvestigationWorkspaceError, NoBinaryOpenError, PermissionRequiredError, @@ -22,6 +25,18 @@ import { export const analysisErrorRemediationAction = ( error: AnalysisError, ): string => { + if (error instanceof HopperTimeoutError) + return error.providerState === "busy" + ? "Check binary_session.analysis_activity, wait for the active Hopper request to finish, then retry." + : "Check binary_session for Hopper health, then retry the operation."; + if (error instanceof HopperProcessError) + return "Check binary_session provider health. Restart the owned Hopper process only when it has stopped."; + if (error instanceof HopperStartError) + return error.ownerRunId === undefined + ? "Check the Hopper launcher and target details, then retry opening the target." + : `Use the active REA session ${error.ownerRunId} or close it before opening this target again.`; + if (error instanceof HopperRemoteError) + return "Review the Hopper diagnostic details; correct the request or retry if the failure was transient."; if (error instanceof AnalysisInputError) return "Correct the listed arguments and retry."; if (error instanceof UnknownRegistryError && error.reason === "not-found") @@ -60,6 +75,8 @@ export const analysisErrorCategory = ( error.diagnosticType === "authorization" ) return "permission_required"; + if (error instanceof HopperProcessError || error instanceof HopperStartError) + return "unavailable"; if (error instanceof ArtifactOperationError) return artifactErrorCategory(error.reason); if (error instanceof EvidenceFileError && error.reason === "disabled") @@ -132,6 +149,8 @@ export const analysisErrorUserMessage = (error: AnalysisError): string => { return "This operation needs additional local permission. Review the requested scope and remediation."; if (error instanceof AnalysisInputError) return "Analysis input is invalid. Check the arguments and try again."; + const hopperMessage = hopperErrorUserMessage(error); + if (hopperMessage !== undefined) return hopperMessage; if (error.userMessage !== undefined) return error.userMessage; const standardMessage = standardErrorMessage(error._tag); if (standardMessage !== undefined) return standardMessage; @@ -162,6 +181,25 @@ export const analysisErrorUserMessage = (error: AnalysisError): string => { return "Analysis could not complete. Run `rea doctor`, then try again."; }; +const hopperErrorUserMessage = (error: AnalysisError): string | undefined => { + if (error instanceof HopperTimeoutError) { + const request = error.operation ?? "startup"; + return error.providerState === "busy" + ? `Hopper timed out during ${request} while the provider remained busy. Check binary_session.analysis_activity, wait for the active request to finish, then retry.` + : `Hopper timed out during ${request} before it started. Check binary_session for provider health, then retry.`; + } + if (error instanceof HopperProcessError) + return `Hopper stopped during ${error.operation ?? "connection"}${error.exitCode === null ? "; its exit was not observed" : ` with exit code ${String(error.exitCode)}`}.${error.userMessage === undefined ? "" : ` ${error.userMessage}`} Check binary_session provider health before retrying.`; + if (error instanceof HopperStartError) + return ( + error.userMessage ?? + "Hopper could not start. Check the launcher and target details, then retry opening the target." + ); + if (error instanceof HopperRemoteError) + return `Hopper ${error.operation ?? "analysis"} failed (${String(error.code)}, ${error.diagnosticType}): ${error.safeMessage}`; + return undefined; +}; + const standardErrorMessage = (tag: AnalysisErrorTag): string | undefined => { if (UNREADABLE_OUTPUT_TAGS.has(tag)) return "Analysis returned an unreadable result. Retry once; if it continues, run `rea doctor`."; @@ -210,7 +248,7 @@ const artifactMessage = (reason: ArtifactOperationError["reason"]): string => { if (reason === "limit") return "Artifact is too large to process safely. Narrow the requested path or use a smaller artifact."; if (reason === "path") - return "Artifact path is not allowed. Choose a path inside the artifact and try again."; + return "Artifact contains an unsafe or conflicting internal path. Inspect the reported path and correct the artifact before retrying."; if (reason === "policy") return "Artifact integrity continuation is disabled by policy. Configure REA_ARTIFACT_INTEGRITY_CONTINUE_ENABLED=true and retry only if continuing after mismatches is approved."; if (reason === "unavailable") diff --git a/src/domain/analysisErrorProjection.test.ts b/src/domain/analysisErrorProjection.test.ts index 08ecd58ef2..e3d2ba7496 100644 --- a/src/domain/analysisErrorProjection.test.ts +++ b/src/domain/analysisErrorProjection.test.ts @@ -6,6 +6,9 @@ import { ArtifactOperationError, BinaryTargetError, HopperProcessError, + HopperRemoteError, + HopperStartError, + HopperTimeoutError, PermissionRequiredError, ProviderAdapterError, ReplayPlanStaleError, @@ -14,6 +17,72 @@ import { } from "./errors.js"; 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"), + ); + + expect(projected).toMatchObject({ + code: "provider_timeout", + category: "timeout", + retryable: true, + details: { + stage: "analysis", + operation: "find_code_for_string", + request_id: 42, + provider_state: "busy", + timeout_ms: 30_000, + }, + }); + expect(projected.message).toContain("binary_session.analysis_activity"); + expect(projected.remediation.action).toContain( + "wait for the active Hopper request", + ); + }); + + it("identifies the REA session that already owns a Hopper target", () => { + const error = new HopperStartError({ + ownerRunId: "session-owner", + userMessage: + "This Hopper target is already open in REA session session-owner. Use that REA session or close it before opening this target again.", + }); + expect(projectAnalysisError(error)).toMatchObject({ + category: "unavailable", + message: expect.stringContaining("session-owner"), + remediation: { + action: expect.stringContaining( + "Use the active REA session session-owner", + ), + }, + }); + }); + + it("retains the Hopper request and provider diagnostic on a remote failure", () => { + expect( + projectAnalysisError( + new HopperRemoteError( + 7, + "Hopper analysis failed in the selected document", + { + diagnosticType: "bridge_exception", + operation: "find_code_for_string", + requestId: 43, + }, + ), + ), + ).toMatchObject({ + code: "execution_failure", + details: { + stage: "analysis", + provider_code: 7, + diagnostic_type: "bridge_exception", + operation: "find_code_for_string", + request_id: 43, + }, + message: expect.stringContaining("Hopper analysis failed"), + }); + }); + it("preserves detached, actionable provider diagnostics", () => { const diagnostics = { runtime_root: "/tmp/rea-ghidra-fixture", diff --git a/src/domain/analysisErrorProjection.ts b/src/domain/analysisErrorProjection.ts index 1fb2166e6a..4214c2d8b9 100644 --- a/src/domain/analysisErrorProjection.ts +++ b/src/domain/analysisErrorProjection.ts @@ -311,11 +311,22 @@ const providerErrorDetails = ( if (error instanceof BrowserObservationError) return { operation: error.operation, reason: error.reason }; if (error instanceof HopperRemoteError) - return { provider_code: error.code, diagnostic_type: error.diagnosticType }; - if (error instanceof HopperProcessError && error.failureCode !== undefined) return { - failure_code: error.failureCode, + stage: "analysis", + provider_code: error.code, + diagnostic_type: error.diagnosticType, + ...(error.operation === undefined ? {} : { operation: error.operation }), + ...(error.requestId === undefined ? {} : { request_id: error.requestId }), + }; + if (error instanceof HopperProcessError) + return { exit_code: error.exitCode, + stage: error.operation === undefined ? "connection" : "analysis", + ...(error.failureCode === undefined + ? {} + : { failure_code: error.failureCode }), + ...(error.operation === undefined ? {} : { operation: error.operation }), + ...(error.requestId === undefined ? {} : { request_id: error.requestId }), ...(error.diagnostic === undefined ? {} : { diagnostics: { ...error.diagnostic } }), @@ -333,7 +344,13 @@ const lifecycleErrorDetails = ( if (error instanceof AnalysisTimeoutError) return { operation: error.operation, timeout_ms: error.timeoutMs }; if (error instanceof HopperTimeoutError) - return { operation: "hopper", timeout_ms: error.timeoutMs }; + return { + stage: error.operation === undefined ? "startup" : "analysis", + timeout_ms: error.timeoutMs, + provider_state: error.providerState, + ...(error.operation === undefined ? {} : { operation: error.operation }), + ...(error.requestId === undefined ? {} : { request_id: error.requestId }), + }; if (error._tag === "ProcessCaptureError" && error.cleanupIncomplete) return { cleanup: "incomplete", diff --git a/src/domain/analysisProfile.test.ts b/src/domain/analysisProfile.test.ts index 92825cd9b7..e144669a69 100644 --- a/src/domain/analysisProfile.test.ts +++ b/src/domain/analysisProfile.test.ts @@ -14,11 +14,11 @@ const PROVIDER = { describe("analysis profile commitments", () => { it("canonicalizes parameter key order and validates its digest", () => { - const first = createAnalysisProfile(PROVIDER, 1, { + const first = createAnalysisProfile(PROVIDER, { architecture: "arm64", analyzers: { strings: true, functions: true }, }); - const reordered = createAnalysisProfile(PROVIDER, 1, { + const reordered = createAnalysisProfile(PROVIDER, { analyzers: { functions: true, strings: true }, architecture: "arm64", }); @@ -27,36 +27,28 @@ describe("analysis profile commitments", () => { expect(analysisProfileSchema.parse(first)).toEqual(first); }); - it("separates provider builds, profile schemas, and semantic parameters", () => { - const baseline = createAnalysisProfile(PROVIDER, 1, { loader: "default" }); + it("separates provider builds and semantic parameters", () => { + const baseline = createAnalysisProfile(PROVIDER, { loader: "default" }); const changedBuild = createAnalysisProfile( { ...PROVIDER, version: "1.2.4" }, - 1, { loader: "default" }, ); - const changedSchema = createAnalysisProfile(PROVIDER, 2, { - loader: "default", - }); - const changedParameters = createAnalysisProfile(PROVIDER, 1, { + const changedParameters = createAnalysisProfile(PROVIDER, { loader: "override", }); expect( - new Set([ - baseline.digest, - changedBuild.digest, - changedSchema.digest, - changedParameters.digest, - ]).size, - ).toBe(4); + new Set([baseline.digest, changedBuild.digest, changedParameters.digest]) + .size, + ).toBe(3); }); it("rejects digest tampering and unbounded parameters", () => { - const profile = createAnalysisProfile(PROVIDER, 1, { loader: "default" }); + const profile = createAnalysisProfile(PROVIDER, { loader: "default" }); expect(() => analysisProfileSchema.parse({ ...profile, digest: "0".repeat(64) }), ).toThrow(/digest/u); expect(() => - createAnalysisProfile(PROVIDER, 1, { + createAnalysisProfile(PROVIDER, { oversized: "x".repeat(65 * 1024), }), ).toThrow(/limit/u); diff --git a/src/domain/analysisProfile.ts b/src/domain/analysisProfile.ts index 9db0ce5f1c..b9fc4baa93 100644 --- a/src/domain/analysisProfile.ts +++ b/src/domain/analysisProfile.ts @@ -41,9 +41,7 @@ const boundedParametersSchema = jsonObjectSchema.superRefine( ); const unsignedAnalysisProfileSchema = z.object({ - schema_version: z.literal(1), provider: committedProviderSchema, - provider_profile_schema_version: z.number().int().min(1), parameters: boundedParametersSchema, }); @@ -66,13 +64,10 @@ export type AnalysisProfileCommitment = z.infer; /** Create a validated RFC 8785 profile commitment at a provider boundary. */ export const createAnalysisProfile = ( provider: CommittedProviderIdentity, - providerProfileSchemaVersion: number, parameters: Readonly>, ): AnalysisProfileCommitment => { const unsigned = unsignedAnalysisProfileSchema.parse({ - schema_version: 1, provider, - provider_profile_schema_version: providerProfileSchemaVersion, parameters, }); return analysisProfileSchema.parse({ @@ -89,10 +84,7 @@ export const analysisProfilesEqual = ( left.digest === right.digest && left.provider.id === right.provider.id && left.provider.name === right.provider.name && - left.provider.version === right.provider.version && - left.schema_version === right.schema_version && - left.provider_profile_schema_version === - right.provider_profile_schema_version; + left.provider.version === right.provider.version; const profileDigest = ( profile: z.infer, diff --git a/src/domain/analysisSnapshot.fixture.ts b/src/domain/analysisSnapshot.fixture.ts index ed88773620..af3104cb9f 100644 --- a/src/domain/analysisSnapshot.fixture.ts +++ b/src/domain/analysisSnapshot.fixture.ts @@ -21,6 +21,5 @@ export const ANALYSIS_SNAPSHOT_PROVIDER = { /** Exact analysis profile shared by analysis-snapshot contract tests. */ export const ANALYSIS_SNAPSHOT_PROFILE = createAnalysisProfile( ANALYSIS_SNAPSHOT_PROVIDER, - 1, { loader: "mach-o-arm64" }, ); diff --git a/src/domain/androidApplication.ts b/src/domain/androidApplication.ts index 7df044d391..572dfebcde 100644 --- a/src/domain/androidApplication.ts +++ b/src/domain/androidApplication.ts @@ -29,7 +29,6 @@ export const androidApplicationProjectionInputSchema = z.strictObject({ /** Deterministic, execution-free Android application inventory projection. */ export const androidApplicationProjectionResultSchema = z.strictObject({ - schema_version: z.literal(1), projection_id: z.string().regex(/^adp_[a-f0-9]{64}$/u), root_sha256: digestSchema, root_format: z.literal("apk"), @@ -141,7 +140,6 @@ export const projectAndroidApplication = ( "Bridge candidates are path-based hypotheses, not decoded JNI declarations or observed runtime calls.", ]; const withoutId = { - schema_version: 1 as const, root_sha256: inventory.manifest.root_sha256, root_format: "apk" as const, source_evidence_ids: evidence diff --git a/src/domain/appleApplication.ts b/src/domain/appleApplication.ts index 6e6b078c10..26a46d9a8e 100644 --- a/src/domain/appleApplication.ts +++ b/src/domain/appleApplication.ts @@ -30,7 +30,6 @@ export const appleApplicationProjectionInputSchema = z.strictObject({ /** Deterministic, execution-free Apple application inventory projection. */ export const appleApplicationProjectionResultSchema = z.strictObject({ - schema_version: z.literal(1), projection_id: z.string().regex(/^aap_[a-f0-9]{64}$/u), root_sha256: digestSchema, root_format: z.literal("ipa"), @@ -142,7 +141,6 @@ export const projectAppleApplication = ( roots, ); const withoutId = { - schema_version: 1 as const, root_sha256: inventory.manifest.root_sha256, root_format: "ipa" as const, source_evidence_ids: evidence diff --git a/src/domain/artifactGraph.ts b/src/domain/artifactGraph.ts index 487b29ff1b..2e8408ae03 100644 --- a/src/domain/artifactGraph.ts +++ b/src/domain/artifactGraph.ts @@ -172,7 +172,6 @@ const artifactEdgeSchema = z.object({ /** Stable cryptographic commitment and counts for a complete artifact graph. */ const artifactGraphManifestSchema = z.object({ - schema_version: z.literal(1), manifest_id: manifestIdSchema, root_artifact_id: artifactIdSchema, root_sha256: sha256Schema, @@ -186,9 +185,9 @@ const artifactGraphManifestSchema = z.object({ /** Independently bounded offset page used for deterministic graph traversal. */ const artifactPageSchema = (item: Item) => z.object({ - items: z.array(item).max(500), + items: z.array(item), offset: z.number().int().min(0), - limit: z.number().int().min(1).max(500), + limit: z.number().int().min(1), total: z.number().int().min(0), next_offset: z.number().int().min(0).nullable(), }); @@ -219,7 +218,6 @@ const extractedArtifactSchema = z.object({ /** Path-independent commitment to one selected extraction operation. */ const artifactExtractionManifestSchema = z.object({ - schema_version: z.literal(1), extraction_id: extractionIdSchema, source_manifest_id: manifestIdSchema, selected_occurrence_ids: z.array(occurrenceIdSchema).min(1).max(500), diff --git a/src/domain/artifactInspection.ts b/src/domain/artifactInspection.ts index 89a84c90e5..2f51dde3c5 100644 --- a/src/domain/artifactInspection.ts +++ b/src/domain/artifactInspection.ts @@ -14,17 +14,6 @@ const boundedTextSchema = z.string().min(1).max(4_096); const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const artifactIdSchema = z.string().regex(/^art_[a-f0-9]{64}$/u); -const inspectionLimitsSchema = z.strictObject({ - max_observations: z.number().int().min(1).max(500).default(100), - max_relationships: z.number().int().min(1).max(500).default(100), - max_hypotheses: z.number().int().min(1).max(100).default(20), - max_unexplored_branches: z.number().int().min(1).max(100).default(20), - max_next_probes: z.number().int().min(1).max(50).default(20), - max_substeps: z.literal(1).default(1), -}); - -export const artifactInspectionLimitsSchema = inspectionLimitsSchema; - const inspectionObservationSchema = z.strictObject({ observation_id: z.string().regex(/^aio_[a-f0-9]{64}$/u), kind: z.enum(["root-manifest", "artifact", "occurrence", "integrity"]), @@ -81,11 +70,7 @@ const nextProbeSchema = z.strictObject({ const unexploredBranchSchema = z.strictObject({ branch_id: z.string().regex(/^aib_[a-f0-9]{64}$/u), - reason: z.enum([ - "page-limit", - "format-specific-analysis-required", - "unknown-format", - ]), + reason: z.enum(["format-specific-analysis-required", "unknown-format"]), detail: boundedTextSchema, next_probe: nextProbeSchema.nullable(), evidence_id: evidenceIdSchema, @@ -93,7 +78,6 @@ const unexploredBranchSchema = z.strictObject({ /** Provider-neutral inspection result with its atomic source Evidence. */ export const artifactInspectionResultSchema = z.strictObject({ - schema_version: z.literal(1), inspection_id: z.string().regex(/^ai_[a-f0-9]{64}$/u), subject: z.strictObject({ manifest_id: z.string().regex(/^agm_[a-f0-9]{64}$/u), @@ -111,14 +95,13 @@ export const artifactInspectionResultSchema = z.strictObject({ evidence: evidenceSchema, }), ) - .min(1) - .max(1), - observations: z.array(inspectionObservationSchema).max(500), - derived_relationships: z.array(inspectionRelationshipSchema).max(500), - hypotheses: z.array(inspectionHypothesisSchema).max(100), - contradictions: z.array(inspectionContradictionSchema).max(100), - unexplored_branches: z.array(unexploredBranchSchema).max(100), - next_probes: z.array(nextProbeSchema).max(50), + .min(1), + observations: z.array(inspectionObservationSchema), + derived_relationships: z.array(inspectionRelationshipSchema), + hypotheses: z.array(inspectionHypothesisSchema), + contradictions: z.array(inspectionContradictionSchema), + unexplored_branches: z.array(unexploredBranchSchema), + next_probes: z.array(nextProbeSchema), coverage: z.strictObject({ status: z.enum(["complete-within-substeps", "partial", "truncated"]), substeps_completed: z.literal(1), @@ -133,13 +116,10 @@ export const artifactInspectionResultSchema = z.strictObject({ next_probes_retained: z.number().int().min(0), next_probes_omitted: z.number().int().min(0), }), - evidence_links: z.array(evidenceIdSchema).min(1).max(1), - limitations: z.array(boundedTextSchema).max(1_000), + evidence_links: z.array(evidenceIdSchema).min(1), + limitations: z.array(boundedTextSchema), }); -export type ArtifactInspectionLimits = z.infer< - typeof artifactInspectionLimitsSchema ->; export type ArtifactInspectionResult = z.infer< typeof artifactInspectionResultSchema >; @@ -147,7 +127,6 @@ export type ArtifactInspectionResult = z.infer< /** Project one successful inventory Evidence record into an inspection report. */ export const createArtifactInspection = ( inventoryInput: unknown, - limits: ArtifactInspectionLimits, ): ArtifactInspectionResult => { const inventoryEvidence = parseInventoryEvidence(inventoryInput); const inventory = artifactInventoryResultSchema.parse( @@ -169,21 +148,20 @@ export const createArtifactInspection = ( nextProbes, ); const retained = { - observations: observations.slice(0, limits.max_observations), - relationships: relationships.slice(0, limits.max_relationships), - hypotheses: hypotheses.slice(0, limits.max_hypotheses), - branches: branches.slice(0, limits.max_unexplored_branches), - probes: nextProbes.slice(0, limits.max_next_probes), + observations, + relationships, + hypotheses, + branches, + probes: nextProbes, }; const omissions = { - observations: observations.length - retained.observations.length, - relationships: relationships.length - retained.relationships.length, - hypotheses: hypotheses.length - retained.hypotheses.length, - branches: branches.length - retained.branches.length, - probes: nextProbes.length - retained.probes.length, + observations: 0, + relationships: 0, + hypotheses: 0, + branches: 0, + probes: 0, }; const semantic = { - schema_version: 1 as const, subject: { manifest_id: inventory.manifest.manifest_id, root_artifact_id: inventory.manifest.root_artifact_id, @@ -395,23 +373,7 @@ const allUnexploredBranches = ( evidenceId: string, nextProbes: ArtifactInspectionResult["next_probes"], ): ArtifactInspectionResult["unexplored_branches"] => { - const pages = [ - ["nodes", inventory.nodes.next_offset], - ["occurrences", inventory.occurrences.next_offset], - ["relationships", inventory.edges.next_offset], - ] as const; - const branches = pages.flatMap(([collection, nextOffset]) => - nextOffset === null - ? [] - : [ - branch( - "page-limit", - `${collection} continue at offset ${String(nextOffset)}.`, - null, - evidenceId, - ), - ], - ); + const branches: ArtifactInspectionResult["unexplored_branches"] = []; branches.push( ...nextProbes.map((probe) => branch( diff --git a/src/domain/artifactInventoryEvidence.ts b/src/domain/artifactInventoryEvidence.ts index 76e9393cf1..1f536a5c9b 100644 --- a/src/domain/artifactInventoryEvidence.ts +++ b/src/domain/artifactInventoryEvidence.ts @@ -72,10 +72,7 @@ const validateInventoryPage = (inventory: ArtifactInventoryResult): void => { "edge ID", ); for (const node of inventory.nodes.items) - if ( - node.artifact_id !== - `art_${digestCanonical({ schema_version: 1, sha256: node.sha256 })}` - ) + if (node.artifact_id !== `art_${digestCanonical({ sha256: node.sha256 })}`) throw new TypeError("Artifact node ID is not content-addressed"); }; @@ -212,7 +209,6 @@ const validateCompleteInventory = (inventory: InventorySet): void => { if (graphSha256 !== inventory.manifest.graph_sha256) throw new TypeError("Artifact graph commitment does not match its members"); const manifestId = `agm_${digestCanonical({ - schema_version: 1, root_artifact_id: inventory.manifest.root_artifact_id, graph_sha256: graphSha256, })}`; diff --git a/src/domain/browserObservation.test.ts b/src/domain/browserObservation.test.ts index 56e360367c..ab4ed17324 100644 --- a/src/domain/browserObservation.test.ts +++ b/src/domain/browserObservation.test.ts @@ -52,7 +52,7 @@ describe("browser observation contracts", () => { expect(isLiteralLoopbackHostname(hostname), hostname).toBe(false); }); - it("applies conservative bounded defaults to public tool input", () => { + it("applies defaults to public observation input", () => { expect( listBrowserTargetsInputSchema.parse({ cdp_endpoint: "http://127.0.0.1:9222", @@ -63,8 +63,6 @@ describe("browser observation contracts", () => { cdp_endpoint: "http://127.0.0.1:9222", allowed_origins: ["https://app.example.test"], approved: true, - offset: 0, - limit: 100, }); expect( inspectWebPageInputSchema.parse({ diff --git a/src/domain/browserObservation.ts b/src/domain/browserObservation.ts index 36cf26baa2..b05f06cc4f 100644 --- a/src/domain/browserObservation.ts +++ b/src/domain/browserObservation.ts @@ -100,11 +100,9 @@ const approvedBrowserInput = { .describe("Explicit approval for browser observation"), }; -/** Public input for bounded discovery of allowed page targets. */ +/** Public input for complete discovery of allowed page targets. */ export const listBrowserTargetsInputSchema = z.object({ ...approvedBrowserInput, - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(200).default(100), }); const browserInspectionLimitsSchema = z.object({ diff --git a/src/domain/browserObservationSchemas.ts b/src/domain/browserObservationSchemas.ts index 18a5f047cb..a83edb3e0f 100644 --- a/src/domain/browserObservationSchemas.ts +++ b/src/domain/browserObservationSchemas.ts @@ -21,18 +21,10 @@ const browserTargetSchema = z.object({ attached: z.boolean(), }); -/** Bounded and policy-filtered browser target discovery result. */ +/** Complete policy-filtered browser target discovery result. */ export const browserTargetListSchema = z.object({ - schema_version: z.literal(1), browser: browserVersionSchema, - targets: z.object({ - items: z.array(browserTargetSchema), - offset: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), - }), + targets: z.array(browserTargetSchema), excluded: z.object({ disallowed_origin: z.number().int().min(0), unsupported_url: z.number().int().min(0), @@ -253,7 +245,6 @@ const browserSafeMetadataSchema = z.object({ /** Provider-neutral normalized result for one passive web-page observation. */ export const webPageInspectionSchema = z.object({ - schema_version: z.literal(2), browser: browserVersionSchema, target: browserTargetSchema, capture_window: z.object({ diff --git a/src/domain/browserScenario.ts b/src/domain/browserScenario.ts index 9d5c06d452..e6fd1a18b6 100644 --- a/src/domain/browserScenario.ts +++ b/src/domain/browserScenario.ts @@ -29,7 +29,6 @@ export { } from "./browserScenarioValues.js"; const scenarioShapeSchema = z.strictObject({ - schema_version: z.literal(1), browser: browserScenarioBrowserSchema, start_url: browserScenarioUrlSchema, allowed_origins: browserScenarioAllowedOriginsSchema, diff --git a/src/domain/browserScenarioCapture.ts b/src/domain/browserScenarioCapture.ts index 1e1de497a8..9bf361bca6 100644 --- a/src/domain/browserScenarioCapture.ts +++ b/src/domain/browserScenarioCapture.ts @@ -24,7 +24,6 @@ export { /** Step-indexed, explicitly bounded browser scenario observation. */ export const browserScenarioCaptureSchema = z .strictObject({ - schema_version: z.literal(1), browser: z.strictObject({ mode: z.enum(["launch", "connect"]), process_ownership: z.enum(["provider-owned", "external"]), diff --git a/src/domain/browserScenarioDiff.test.ts b/src/domain/browserScenarioDiff.test.ts index 51e1f7b328..d8563e31df 100644 --- a/src/domain/browserScenarioDiff.test.ts +++ b/src/domain/browserScenarioDiff.test.ts @@ -208,7 +208,6 @@ const scenarioCapture = ( }); const eventSequence = options.eventSequence ?? 1; return browserScenarioCaptureSchema.parse({ - schema_version: 1, browser: { mode: "launch", process_ownership: "provider-owned", diff --git a/src/domain/browserScenarioDiff.ts b/src/domain/browserScenarioDiff.ts index 513b27d617..2ec690ff85 100644 --- a/src/domain/browserScenarioDiff.ts +++ b/src/domain/browserScenarioDiff.ts @@ -97,7 +97,6 @@ export const compareBrowserScenarios = ( : "unchanged"; return browserScenarioDiffSchema.parse({ - schema_version: 1, comparison_kind: "browser_scenario", overall_status: overallStatus, normalization, diff --git a/src/domain/browserScenarioDiffValues.ts b/src/domain/browserScenarioDiffValues.ts index dbd318ea06..2f035308a7 100644 --- a/src/domain/browserScenarioDiffValues.ts +++ b/src/domain/browserScenarioDiffValues.ts @@ -146,7 +146,6 @@ const builtInNormalizationSchema = z.enum([ /** Step alignment, recorded normalization, and bounded artifact differences. */ export const browserScenarioDiffSchema = z.strictObject({ - schema_version: z.literal(1), comparison_kind: z.literal("browser_scenario"), overall_status: z.enum(["changed", "unchanged", "unknown"]), normalization: z.strictObject({ diff --git a/src/domain/browserSession.ts b/src/domain/browserSession.ts index 313b7a5a82..12ab4521c3 100644 --- a/src/domain/browserSession.ts +++ b/src/domain/browserSession.ts @@ -44,7 +44,6 @@ const timelineEventSchema = z.object({ /** Navigation-aware session result for external user actions. */ export const webObservationSessionSchema = z.object({ - schema_version: z.literal(1), browser: z.object({ product: z.string(), protocol_version: z.string(), diff --git a/src/domain/callPath.test.ts b/src/domain/callPath.test.ts index 2d48ce4ab5..b6690cf2ff 100644 --- a/src/domain/callPath.test.ts +++ b/src/domain/callPath.test.ts @@ -10,18 +10,9 @@ import { createEvidence, type Evidence } from "./evidence.js"; import { functionDossierSchema } from "./hopperValues.js"; import { jsonValueSchema } from "./jsonValue.js"; -const bounded = (items: readonly Item[], complete = true) => ({ - items, - total: complete ? items.length : null, - returned: items.length, - truncated: !complete, - next_offset: null, -}); - const observe = ( address: string, callees: readonly string[], - complete = true, provider = "rea-workflow", ): Evidence => { const value = functionDossierSchema.parse({ @@ -31,29 +22,19 @@ const observe = ( signature: null, locals: [], }, - pseudocode: { - text: "", - total_chars: 0, - returned_chars: 0, - truncated: false, - next_offset: null, - }, - assembly: bounded([]), - comments: bounded([]), - callers: bounded([]), - callees: bounded( - callees.map((callee) => ({ - address: callee, - name: `fn_${callee.slice(2)}`, - })), - complete, - ), - incoming_references: bounded([]), - outgoing_references: bounded([]), - referenced_strings: bounded([]), - referenced_names: bounded([]), - basic_blocks: bounded([]), - instruction_scan: { scanned: 0, truncated: false }, + pseudocode: "", + assembly: [], + comments: [], + callers: [], + callees: callees.map((callee) => ({ + address: callee, + name: `fn_${callee.slice(2)}`, + })), + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [], }); return createEvidence( { path: "/tmp/a", sha256: "a".repeat(64), format: "mach-o" }, @@ -62,7 +43,6 @@ const observe = ( operation: "analyze_function", parameters: enhancedInputSchemas.analyze_function.parse({ procedure: address, - include_assembly: false, }), result: jsonValueSchema.parse(value), confidence: "derived", @@ -98,30 +78,20 @@ describe("call path reconstruction", () => { .success, ).toBe(false); expect( - callPathResultSchema.safeParse({ - ...result, - paths: { ...result.paths, total: null }, - }).success, + callPathResultSchema.safeParse({ ...result, paths: [] }).success, ).toBe(false); expect( - result.paths.items.map((path) => - path.nodes.map(({ address }) => address), - ), - ).toEqual([ - ["0x1000", "0x2000", "0x4000"], - ["0x1000", "0x3000", "0x5000", "0x6000", "0x4000"], - ]); + result.paths.map((path) => path.nodes.map(({ address }) => address)), + ).toEqual([["0x1000", "0x2000", "0x4000"]]); expect( - result.paths.items[0]?.edges.every( - (edge) => edge.evidence_links.length > 0, - ), + result.paths[0]?.edges.every((edge) => edge.evidence_links.length > 0), ).toBe(true); }); it("accepts a direct cited edge without a goal dossier", () => { const result = run([observe("0x1000", ["0x4000"])]); expect(result).toMatchObject({ status: "found", shortest_hops: 1 }); - expect(result.paths.items[0]?.nodes[1]).toMatchObject({ + expect(result.paths[0]?.nodes[1]).toMatchObject({ address: "0x4000", name: null, }); @@ -143,32 +113,22 @@ describe("call path reconstruction", () => { ); }); - it("reports incomplete and depth-bounded absence as unknown", () => { - expect(run([observe("0x1000", [], false)]).status).toBe("unknown"); + it("searches the complete supplied graph", () => { expect( - run([observe("0x1000", ["0x2000"]), observe("0x2000", [])], { - max_depth: 0, - }).status, - ).toBe("unknown"); + run([observe("0x1000", ["0x2000"]), observe("0x2000", [])]).status, + ).toBe("not_found"); }); - it("truncates deterministically at max_paths and paginates retained paths", () => { - const result = run( - [ - observe("0x1000", ["0x2000", "0x3000"]), - observe("0x2000", ["0x4000"]), - observe("0x3000", ["0x4000"]), - ], - { max_paths: 1, offset: 0, limit: 1 }, - ); - expect(result.status).toBe("truncated"); - expect(result.paths).toMatchObject({ - total: null, - returned: 1, - truncated: true, - lower_bound: 2, - }); - expect(result.paths.items[0]?.nodes[1]?.address).toBe("0x2000"); + it("returns all shortest paths inline without paging", () => { + const result = run([ + observe("0x1000", ["0x2000", "0x3000"]), + observe("0x2000", ["0x4000"]), + observe("0x3000", ["0x4000"]), + ]); + expect(result.paths.map((path) => path.nodes[1]?.address)).toEqual([ + "0x2000", + "0x3000", + ]); }); it("normalizes hex addresses and rejects duplicates and mixed providers", () => { @@ -182,7 +142,7 @@ describe("call path reconstruction", () => { ).toThrow(); const one = observe("0x1000", []); expect(() => run([one, one])).toThrow(/Duplicate/u); - expect(() => run([one, observe("0x2000", [], true, "other")])).toThrow( + expect(() => run([one, observe("0x2000", [], "other")])).toThrow( /providers/u, ); }); diff --git a/src/domain/callPath.ts b/src/domain/callPath.ts index 7497e0d51c..f354d0f96c 100644 --- a/src/domain/callPath.ts +++ b/src/domain/callPath.ts @@ -5,7 +5,6 @@ import { callPathInputSchema, callPathResultSchema, parseCallPathAddress, - type CallPathEvidenceGroup, type CallPathInput, type CallPathResult, type OutputCallPath, @@ -15,9 +14,6 @@ import { type FunctionSnapshot, } from "./functionDossierEvidence.js"; -const MAX_GRAPH_EDGES = 10_000; -const MAX_PATH_EXPANSIONS = 100_000; - export { callPathInputSchema, callPathResultSchema }; export type { CallPathInput, CallPathResult }; @@ -29,7 +25,7 @@ interface SearchState { readonly limitations: readonly string[]; } -/** Reconstruct bounded direct-callee paths from explicit analyze_function Evidence. */ +/** Reconstruct direct-callee paths from explicit analyze_function Evidence. */ export const buildCallPath = (input: CallPathInput): CallPathResult => { const parsed = callPathInputSchema.parse(input); const { snapshots, graph } = prepareCallGraph(parsed); @@ -38,37 +34,24 @@ export const buildCallPath = (input: CallPathInput): CallPathResult => { snapshots, start: parsed.start.address, goal: parsed.goal.address, - maxDepth: parsed.max_depth, }); const shortest = graph.hasNode(parsed.start.address) && graph.hasNode(parsed.goal.address) ? bidirectional(graph, parsed.start.address, parsed.goal.address) : null; - const enumeration = - shortest === null || shortest.length - 1 > parsed.max_depth - ? { paths: [], budgetExhausted: false } + const paths = + shortest === null + ? [] : enumeratePaths({ graph, start: parsed.start.address, goal: parsed.goal.address, shortestDepth: shortest.length - 1, - maxDepth: parsed.max_depth, - limit: parsed.max_paths + 1, - }); - const hasKnownExtraPath = enumeration.paths.length > parsed.max_paths; - const capped = hasKnownExtraPath || enumeration.budgetExhausted; - const retained = enumeration.paths.slice(0, parsed.max_paths); - const paths = retained.map((path) => citePath(path, snapshots)); - const total = paths.length; - const items = paths.slice(parsed.offset, parsed.offset + parsed.limit); + }).paths.map((path) => citePath(path, snapshots)); const shortestHops = paths[0]?.hops; const found = shortestHops !== undefined; - const exhaustive = search.exhaustive && !capped; - const limitations = deriveLimitations( - search, - { budgetExhausted: enumeration.budgetExhausted, capped, found, shortest }, - parsed, - ); + const exhaustive = search.exhaustive; + const limitations = search.limitations; const resultContext = { start: parsed.start.address, goal: parsed.goal.address, @@ -78,84 +61,24 @@ export const buildCallPath = (input: CallPathInput): CallPathResult => { left.localeCompare(right), ), }; - const searchScope = { - max_depth: parsed.max_depth, - max_paths: parsed.max_paths, - }; - const pathPage = { - items, - offset: parsed.offset, - limit: parsed.limit, - returned: items.length, - lower_bound: total + (hasKnownExtraPath ? 1 : 0), - next_offset: - parsed.offset + items.length < total - ? parsed.offset + items.length - : null, - }; - if (capped) - return callPathResultSchema.parse({ - ...resultContext, - status: "truncated", - shortest_hops: shortestHops ?? null, - search_scope: { ...searchScope, exhaustive: false }, - paths: { ...pathPage, total: null, truncated: true }, - }); + const searchScope = { exhaustive }; if (found) return callPathResultSchema.parse({ ...resultContext, status: "found", shortest_hops: shortestHops, - search_scope: { ...searchScope, exhaustive }, - paths: { ...pathPage, total, truncated: false }, + search_scope: searchScope, + paths, }); return callPathResultSchema.parse({ ...resultContext, status: exhaustive ? "not_found" : "unknown", shortest_hops: null, - search_scope: { ...searchScope, exhaustive }, - paths: { - ...pathPage, - items: [], - total: 0, - returned: 0, - truncated: false, - lower_bound: 0, - next_offset: null, - }, + search_scope: searchScope, + paths: [], }); }; -interface PathOutcome { - readonly budgetExhausted: boolean; - readonly capped: boolean; - readonly found: boolean; - readonly shortest: readonly string[] | null; -} - -const deriveLimitations = ( - search: SearchState, - outcome: PathOutcome, - input: CallPathInput, -): string[] => { - const limitations = [...search.limitations]; - if (outcome.capped) - limitations.push( - outcome.budgetExhausted - ? `Path enumeration stopped at ${MAX_PATH_EXPANSIONS} expansions` - : `Path enumeration stopped at max_paths=${input.max_paths}`, - ); - if ( - !outcome.found && - outcome.shortest !== null && - outcome.shortest.length - 1 > input.max_depth - ) - limitations.push( - `The shortest observed path exceeds max_depth=${input.max_depth}`, - ); - return limitations; -}; - const summarizeSearch = ( graph: DirectedGraph, reached: ReadonlyMap, @@ -179,7 +102,7 @@ const prepareCallGraph = (input: CallPathInput) => { }; const parseSnapshots = ( - groups: readonly CallPathEvidenceGroup[], + groups: CallPathInput["functions"], ): Map => { const snapshots = new Map(); for (const group of groups) { @@ -226,10 +149,6 @@ const createGraph = ( const calleeAddress = normalizeAddress(callee.address); graph.mergeNode(calleeAddress); graph.mergeDirectedEdge(address, calleeAddress); - if (graph.size > MAX_GRAPH_EDGES) - throw new TypeError( - `Call graph exceeds ${MAX_GRAPH_EDGES} directed edges`, - ); } } return graph; @@ -240,7 +159,6 @@ interface SearchInput { readonly snapshots: ReadonlyMap; readonly start: string; readonly goal: string; - readonly maxDepth: number; } const inspectSearch = ({ @@ -248,7 +166,6 @@ const inspectSearch = ({ snapshots, start, goal, - maxDepth, }: SearchInput): SearchState => { if (!graph.hasNode(start)) return { @@ -275,18 +192,9 @@ const inspectSearch = ({ ); continue; } - if (!snapshot.collections.callees.complete) - limitations.push( - `Callee coverage is incomplete for reachable function ${node}`, - ); const neighbors = graph .outNeighbors(node) .sort((left, right) => left.localeCompare(right)); - if (depth === maxDepth) { - if (neighbors.length > 0) - limitations.push(`Search reached max_depth=${maxDepth} at ${node}`); - continue; - } for (const neighbor of neighbors) if (!reached.has(neighbor)) { reached.set(neighbor, depth + 1); @@ -307,8 +215,6 @@ interface EnumerationInput { readonly start: string; readonly goal: string; readonly shortestDepth: number; - readonly maxDepth: number; - readonly limit: number; } const enumeratePaths = ({ @@ -316,11 +222,8 @@ const enumeratePaths = ({ start, goal, shortestDepth, - maxDepth, - limit, }: EnumerationInput): { readonly paths: string[][]; - readonly budgetExhausted: boolean; } => { const output: string[][] = []; const state: EnumerationState = { @@ -329,17 +232,9 @@ const enumeratePaths = ({ path: [start], visited: new Set([start]), output, - limit, - expansions: 0, - budgetExhausted: false, }; - for ( - let depth = shortestDepth; - depth <= maxDepth && output.length < limit; - depth += 1 - ) - enumerateAtDepth(state, depth); - return { paths: output, budgetExhausted: state.budgetExhausted }; + enumerateAtDepth(state, shortestDepth); + return { paths: output }; }; interface EnumerationState { @@ -348,20 +243,12 @@ interface EnumerationState { readonly path: string[]; readonly visited: Set; readonly output: string[][]; - readonly limit: number; - expansions: number; - budgetExhausted: boolean; } const enumerateAtDepth = (state: EnumerationState, remaining: number): void => { - const { graph, goal, path, visited, output, limit } = state; - state.expansions += 1; - if (state.expansions > MAX_PATH_EXPANSIONS) { - state.budgetExhausted = true; - return; - } + const { graph, goal, path, visited, output } = state; const current = path.at(-1); - if (current === undefined || output.length >= limit) return; + if (current === undefined) return; if (remaining === 0) { if (current === goal) output.push([...path]); return; @@ -376,7 +263,6 @@ const enumerateAtDepth = (state: EnumerationState, remaining: number): void => { enumerateAtDepth(state, remaining - 1); path.pop(); visited.delete(neighbor); - if (output.length >= limit || state.budgetExhausted) return; } }; diff --git a/src/domain/callPathSchemas.ts b/src/domain/callPathSchemas.ts index 105bc1ae8f..45f7f3208e 100644 --- a/src/domain/callPathSchemas.ts +++ b/src/domain/callPathSchemas.ts @@ -7,57 +7,36 @@ const inputAddressSchema = z .string() .regex(/^0[xX][0-9a-fA-F]+$/u) .transform((address) => `0x${BigInt(address).toString(16)}`); +const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); /** Parse a caller-supplied hexadecimal address into canonical form. */ export const parseCallPathAddress = (input: unknown): string => inputAddressSchema.parse(input); -const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); -const evidenceGroupSchema = z.union([ - evidenceSchema, - z.array(evidenceSchema).min(1).max(100), -]); -/** Strict, bounded input for explicit call-path reconstruction. */ -export const callPathInputSchema = z - .object({ - functions: z.array(evidenceGroupSchema).min(1).max(500), - start: z.object({ address: inputAddressSchema }).strict(), - goal: z.object({ address: inputAddressSchema }).strict(), - max_depth: z.number().int().min(0).max(32).default(8), - max_paths: z.number().int().min(1).max(100).default(10), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(100).default(100), - unknown_registry_approved: z.literal(true).optional(), - }) - .superRefine(({ functions }, context) => { - const pages = functions.reduce( - (total, group) => total + (Array.isArray(group) ? group.length : 1), - 0, - ); - if (pages > 2_000) - context.addIssue({ - code: "custom", - message: "Call-path Evidence exceeds 2000 pages", - path: ["functions"], - }); - }); +/** Strict input for explicit call-path reconstruction from complete dossiers. */ +export const callPathInputSchema = z.object({ + functions: z.array(evidenceSchema).min(1), + start: z.object({ address: inputAddressSchema }).strict(), + goal: z.object({ address: inputAddressSchema }).strict(), + unknown_registry_approved: z.literal(true).optional(), +}); const citedNodeSchema = z.object({ address: addressSchema, name: z.string().nullable(), - evidence_links: z.array(evidenceIdSchema).min(1).max(100), + evidence_links: z.array(evidenceIdSchema).min(1), }); const citedEdgeSchema = z.object({ source: addressSchema, target: addressSchema, - evidence_links: z.array(evidenceIdSchema).min(1).max(100), + evidence_links: z.array(evidenceIdSchema).min(1), }); const pathSchema = z .object({ hops: z.number().int().min(0), - nodes: z.array(citedNodeSchema).min(1).max(33), - edges: z.array(citedEdgeSchema).max(32), - evidence_links: z.array(evidenceIdSchema).min(1).max(3_300), + nodes: z.array(citedNodeSchema).min(1), + edges: z.array(citedEdgeSchema), + evidence_links: z.array(evidenceIdSchema).min(1), }) .superRefine((path, context) => { const edgesConnectNodes = path.edges.every( @@ -75,66 +54,6 @@ const pathSchema = z message: "Path hops and edges must connect the ordered nodes", }); }); -const searchScopeShape = { - max_depth: z.number().int().min(0).max(32), - max_paths: z.number().int().min(1).max(100), -}; -const pathPageShape = { - offset: z.number().int().min(0), - limit: z.number().int().min(1).max(100), -}; -const pageContextShape = { - ...pathPageShape, - items: z.array(pathSchema).max(100), - returned: z.number().int().min(0).max(100), - next_offset: z.number().int().min(0).nullable(), -}; -const completePathPageSchema = z - .object({ - ...pageContextShape, - total: z.number().int().min(1), - truncated: z.literal(false), - lower_bound: z.number().int().min(1), - }) - .superRefine((page, context) => { - const expectedNext = - page.offset + page.items.length < page.total - ? page.offset + page.items.length - : null; - if ( - page.returned !== page.items.length || - page.lower_bound !== page.total || - page.next_offset !== expectedNext - ) - context.addIssue({ - code: "custom", - message: "Complete path page counters are inconsistent", - }); - }); -const emptyPathPageSchema = z.object({ - ...pathPageShape, - items: z.tuple([]), - total: z.literal(0), - returned: z.literal(0), - truncated: z.literal(false), - lower_bound: z.literal(0), - next_offset: z.null(), -}); -const truncatedPathPageSchema = z - .object({ - ...pageContextShape, - total: z.null(), - truncated: z.literal(true), - lower_bound: z.number().int().min(0), - }) - .superRefine((page, context) => { - if (page.returned !== page.items.length) - context.addIssue({ - code: "custom", - message: "Returned path count must equal retained items", - path: ["returned"], - }); - }); const resultContextShape = { start: addressSchema, goal: addressSchema, @@ -143,52 +62,35 @@ const resultContextShape = { edges: z.number().int().min(0), depth_reached: z.number().int().min(0), }), - evidence_links: z.array(evidenceIdSchema).min(1).max(50_000), + evidence_links: z.array(evidenceIdSchema).min(1), limitations: z.array(z.string()), }; -/** Evidence-cited, bounded directed call-path result. */ +/** Evidence-cited directed call-path result containing every shortest path. */ export const callPathResultSchema = z.union([ z.object({ ...resultContextShape, status: z.literal("found"), shortest_hops: z.number().int().min(0), - search_scope: z.object({ ...searchScopeShape, exhaustive: z.boolean() }), - paths: completePathPageSchema, + search_scope: z.object({ exhaustive: z.boolean() }), + paths: z.array(pathSchema).min(1), }), z.object({ ...resultContextShape, status: z.literal("not_found"), shortest_hops: z.null(), - search_scope: z.object({ - ...searchScopeShape, - exhaustive: z.literal(true), - }), - paths: emptyPathPageSchema, + search_scope: z.object({ exhaustive: z.literal(true) }), + paths: z.tuple([]), }), z.object({ ...resultContextShape, status: z.literal("unknown"), shortest_hops: z.null(), - search_scope: z.object({ - ...searchScopeShape, - exhaustive: z.literal(false), - }), - paths: emptyPathPageSchema, - }), - z.object({ - ...resultContextShape, - status: z.literal("truncated"), - shortest_hops: z.number().int().min(0).nullable(), - search_scope: z.object({ - ...searchScopeShape, - exhaustive: z.literal(false), - }), - paths: truncatedPathPageSchema, + search_scope: z.object({ exhaustive: z.literal(false) }), + paths: z.tuple([]), }), ]); -export type CallPathEvidenceGroup = z.infer; export type CallPathInput = z.infer; export type CallPathResult = z.infer; export type OutputCallPath = z.infer; diff --git a/src/domain/changedBehavior.test.ts b/src/domain/changedBehavior.test.ts index ee8b194e27..b2354c6da1 100644 --- a/src/domain/changedBehavior.test.ts +++ b/src/domain/changedBehavior.test.ts @@ -25,7 +25,6 @@ const right = source("2"); const comparison = ( operation: "compare_process_captures" | "compare_artifacts", result: JsonValue, - processPredicateVersion: "v3" | "v4" = "v3", ): Evidence => { const process = operation === "compare_process_captures"; return createEvidence( @@ -39,7 +38,7 @@ const comparison = ( }, { predicateType: process - ? `rea.process-comparison/${processPredicateVersion}` + ? "rea.process-comparison" : "rea.artifact-comparison/v1", operation, parameters: {}, @@ -134,9 +133,9 @@ const expectInvalidSummary = (result: ChangedBehaviorResult): void => { }; describe("changed behavior", () => { - it("accepts declared-trace process comparison Evidence v4", () => { + it("accepts process comparison Evidence", () => { const result = findChangedBehavior( - [comparison("compare_process_captures", processResult(), "v4")], + [comparison("compare_process_captures", processResult())], 0, 100, ); diff --git a/src/domain/changedBehavior.ts b/src/domain/changedBehavior.ts index 5c0a0261a2..e92dd349f7 100644 --- a/src/domain/changedBehavior.ts +++ b/src/domain/changedBehavior.ts @@ -128,7 +128,7 @@ type RuntimeStatus = z.infer["status"]; const EXPECTED_PROVIDERS = { compare_process_captures: { - predicates: ["rea.process-comparison/v3", "rea.process-comparison/v4"], + predicates: ["rea.process-comparison"], id: "rea-process", name: "REA deterministic process harness", version: "3", diff --git a/src/domain/electronActiveObservation.fixture.ts b/src/domain/electronActiveObservation.fixture.ts index e5f6d8a822..a68cd68d31 100644 --- a/src/domain/electronActiveObservation.fixture.ts +++ b/src/domain/electronActiveObservation.fixture.ts @@ -5,7 +5,6 @@ export const createElectronActiveObservationFixtureResult = ( applicationPath: string, ) => electronActiveObservationResultSchema.parse({ - schema_version: 1, application: { executable_path: process.execPath, application_path: applicationPath, diff --git a/src/domain/electronActiveObservation.ts b/src/domain/electronActiveObservation.ts index 7d73005c1c..ac87a3beae 100644 --- a/src/domain/electronActiveObservation.ts +++ b/src/domain/electronActiveObservation.ts @@ -66,7 +66,6 @@ const limitsSchema = z.strictObject({ /** Input for one explicit, provider-owned Electron runtime experiment. */ export const electronActiveObservationInputSchema = z .strictObject({ - schema_version: z.literal(1), executable_path: absolutePathSchema, application_path: absolutePathSchema, application_root: absolutePathSchema, @@ -264,7 +263,6 @@ const actionResultSchema = z.discriminatedUnion("status", [ /** Bounded result of a provider-owned Electron runtime experiment. */ export const electronActiveObservationResultSchema = z.strictObject({ - schema_version: z.literal(1), application: z.strictObject({ executable_path: absolutePathSchema, application_path: absolutePathSchema, diff --git a/src/domain/electronObservation.ts b/src/domain/electronObservation.ts index b61a787dee..0264b1a9b3 100644 --- a/src/domain/electronObservation.ts +++ b/src/domain/electronObservation.ts @@ -28,8 +28,6 @@ const approvedElectronInput = { /** Input for listing root-confined file:// page targets from Electron CDP. */ export const listElectronTargetsInputSchema = z.object({ ...approvedElectronInput, - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(200).default(100), }); export type ListElectronTargetsInput = z.infer< typeof listElectronTargetsInputSchema @@ -113,18 +111,10 @@ const electronTargetSchema = z.object({ attached: z.boolean(), }); -/** Root-filtered Electron file target inventory. */ +/** Complete root-filtered Electron file target inventory. */ export const electronTargetListSchema = z.object({ - schema_version: z.literal(1), browser: browserVersionSchema, - targets: z.object({ - items: z.array(electronTargetSchema), - offset: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), - }), + targets: z.array(electronTargetSchema), excluded: z.object({ outside_root: z.number().int().min(0), unsupported_url: z.number().int().min(0), @@ -141,7 +131,6 @@ const electronSourceSchema = z.discriminatedUnion("included", [ /** Provider-neutral passive Electron file-page structure and script inventory. */ export const electronPageInspectionSchema = z.object({ - schema_version: z.literal(1), browser: browserVersionSchema, target: electronTargetSchema, capture_window: z.object({ diff --git a/src/domain/errors.ts b/src/domain/errors.ts index d05d630c2b..7c55af0f11 100644 --- a/src/domain/errors.ts +++ b/src/domain/errors.ts @@ -396,8 +396,15 @@ export class UnknownRegistryError extends AnalysisError { export class HopperTimeoutError extends HopperError { readonly _tag = "HopperTimeoutError"; - constructor(readonly timeoutMs: number) { - super(`Hopper did not respond within ${String(timeoutMs)}ms`); + constructor( + readonly timeoutMs: number, + readonly operation?: string, + readonly requestId?: number, + readonly providerState: "busy" | "not_started" = "not_started", + ) { + super( + `Hopper ${operation === undefined ? "startup" : operation} timed out after ${String(timeoutMs)}ms`, + ); } } @@ -423,15 +430,27 @@ export type HopperDiagnosticType = | "bridge_exception"; /** Hopper's JSON-RPC endpoint returned an expected remote error response. */ +export interface HopperRemoteErrorContext { + readonly diagnosticType?: HopperDiagnosticType; + readonly operation?: string; + readonly requestId?: number; +} + export class HopperRemoteError extends HopperError { readonly _tag = "HopperRemoteError"; + readonly diagnosticType: HopperDiagnosticType; + readonly operation: string | undefined; + readonly requestId: number | undefined; constructor( readonly code: number, readonly safeMessage: string, - readonly diagnosticType: HopperDiagnosticType = "remote", + context: HopperRemoteErrorContext = {}, ) { super(`Hopper request failed (${String(code)}): ${safeMessage}`); + this.diagnosticType = context.diagnosticType ?? "remote"; + this.operation = context.operation; + this.requestId = context.requestId; } } @@ -444,6 +463,8 @@ export class HopperProcessError extends HopperError { constructor( readonly exitCode: number | null, readonly diagnostic?: HopperStartupFailureDiagnostic, + readonly operation?: string, + readonly requestId?: number, ) { super(`Hopper bridge stopped unexpectedly with code ${String(exitCode)}`); const failure = hopperStartupFailure(exitCode); @@ -455,9 +476,18 @@ export class HopperProcessError extends HopperError { /** Hopper or the repository bridge could not be started. */ export class HopperStartError extends HopperError { readonly _tag = "HopperStartError"; + override readonly userMessage: string | undefined; + readonly ownerRunId: string | undefined; - constructor(options?: ErrorOptions) { + constructor( + options?: ErrorOptions & { + readonly userMessage?: string; + readonly ownerRunId?: string; + }, + ) { super("Hopper application bridge could not be started", options); + this.userMessage = options?.userMessage; + this.ownerRunId = options?.ownerRunId; } } diff --git a/src/domain/evidence.test.ts b/src/domain/evidence.test.ts index 03f6786b56..58fddfd2e3 100644 --- a/src/domain/evidence.test.ts +++ b/src/domain/evidence.test.ts @@ -15,7 +15,7 @@ const TARGET: BinaryTarget = { availableArchitectures: ["arm64"], }; const PROVIDER = { id: "fixture", name: "Fixture provider", version: "1" }; -const PROFILE = createAnalysisProfile(PROVIDER, 1, { loader: "default" }); +const PROFILE = createAnalysisProfile(PROVIDER, { loader: "default" }); describe("analysis evidence identity", () => { it("normalizes prototype-named parameter keys", () => { @@ -70,7 +70,7 @@ describe("analysis evidence identity", () => { }, ); - it("creates deterministic provider-neutral Evidence v2", () => { + it("creates deterministic provider-neutral Evidence", () => { const observation = { operation: "procedure_info", parameters: { document: null, procedure: "0x1000" }, @@ -81,7 +81,6 @@ describe("analysis evidence identity", () => { expect(evidenceSchema.parse(evidence)).toEqual(evidence); expect(parseEvidence(evidence)).toEqual(evidence); expect(evidence).toMatchObject({ - schema_version: 2, provider: PROVIDER, subject: { digest: { sha256: "a".repeat(64) } }, confidence: "observed", @@ -145,7 +144,7 @@ describe("analysis evidence identity", () => { ).not.toBe(first.evidence_id); }); - it("rejects semantic tampering and obsolete schema versions", () => { + it("rejects semantic tampering", () => { const evidence = createEvidence(TARGET, PROVIDER, { operation: "health", parameters: {}, @@ -154,9 +153,6 @@ describe("analysis evidence identity", () => { expect(() => parseEvidence({ ...evidence, normalized_result: false }), ).toThrow("semantic identifier"); - expect(() => parseEvidence({ schema_version: 1 })).toThrow( - "Evidence v1 is not accepted. Produce Evidence v2.", - ); }); }); diff --git a/src/domain/evidence.ts b/src/domain/evidence.ts index 0fdd892b4b..8726f95f53 100644 --- a/src/domain/evidence.ts +++ b/src/domain/evidence.ts @@ -82,7 +82,6 @@ const executionEnvironmentSchema = z.object({ const evidenceBaseSchema = z .object({ - schema_version: z.literal(2), evidence_id: z.string().regex(/^ev_[a-f0-9]{64}$/u), subject: subjectSchema.nullable(), provider: providerSchema, @@ -141,7 +140,7 @@ export const evidenceRecordSchema = z.union([ export type Evidence = z.infer; export type EvidenceLocation = z.infer; -/** Minimal immutable local artifact identity accepted by Evidence v2. */ +/** Minimal immutable local artifact identity accepted by Evidence. */ export interface EvidenceSubjectTarget { readonly path: string; readonly sha256: string; @@ -189,7 +188,6 @@ const canonicalJson = (value: JsonValue): string => { }; const semanticProjection = (evidence: EvidenceWithoutId): JsonValue => ({ - schema_version: evidence.schema_version, subject: evidence.subject === null ? null @@ -221,15 +219,6 @@ const computeEvidenceId = (evidence: EvidenceWithoutId): string => /** Parse evidence and reject a syntactically valid but tampered semantic ID. */ export const parseEvidence = (input: unknown): Evidence => { - if ( - typeof input === "object" && - input !== null && - "schema_version" in input && - input.schema_version !== 2 - ) - throw new TypeError( - `Unsupported evidence schema_version ${String(input.schema_version)}; Evidence v1 is not accepted. Produce Evidence v2.`, - ); const evidence = evidenceRecordSchema.parse(input); const { evidence_id: evidenceId, ...withoutId } = evidence; if (computeEvidenceId(withoutId) !== evidenceId) @@ -239,7 +228,7 @@ export const parseEvidence = (input: unknown): Evidence => { return evidence; }; -/** Build deterministic Evidence v2 from an immutable artifact subject. */ +/** Build deterministic Evidence from an immutable artifact subject. */ export const createEvidence = ( target: EvidenceSubjectTarget | BinaryTarget | undefined, provider: EvidenceProvider, @@ -256,7 +245,6 @@ export const createEvidence = ( local_path: target.path, }; const semantic = { - schema_version: 2, subject: subject === null ? null diff --git a/src/domain/evidenceBundle.ts b/src/domain/evidenceBundle.ts index e505053280..5db061b111 100644 --- a/src/domain/evidenceBundle.ts +++ b/src/domain/evidenceBundle.ts @@ -34,7 +34,6 @@ const captureManifestSchema = z.object({ }); export const evidenceBundleSchema = z.object({ - bundle_version: z.literal(2), artifacts: z.array(artifactManifestSchema), providers: z.array(providerManifestSchema), environments: z.array(environmentManifestSchema), @@ -63,7 +62,6 @@ export const createEvidenceBundle = ( left.evidence_id.localeCompare(right.evidence_id), ); return { - bundle_version: 2, artifacts: uniqueSorted( sortedRecords.flatMap(({ subject }) => subject === null diff --git a/src/domain/functionComparison.test.ts b/src/domain/functionComparison.test.ts index f778cb6b2d..ac1c3f5eb4 100644 --- a/src/domain/functionComparison.test.ts +++ b/src/domain/functionComparison.test.ts @@ -10,14 +10,6 @@ import { createEvidence, type Evidence } from "./evidence.js"; import { functionDossierSchema } from "./hopperValues.js"; import { jsonValueSchema } from "./jsonValue.js"; -const bounded = (items: readonly Item[]) => ({ - items, - total: items.length, - returned: items.length, - truncated: false, - next_offset: null, -}); - const dossier = ( text: string, base: "0x1000" | "0x2000", @@ -30,29 +22,22 @@ const dossier = ( signature: "int main(void)", locals: [], }, - pseudocode: { - text, - total_chars: [...text].length, - returned_chars: [...text].length, - truncated: false, - next_offset: null, - }, - assembly: bounded(["ret"]), - comments: bounded([]), - callers: bounded([]), - callees: bounded([]), - incoming_references: bounded([]), - outgoing_references: bounded([]), - referenced_strings: bounded([]), - referenced_names: bounded([]), - basic_blocks: bounded([ + pseudocode: text, + assembly: ["ret"], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [ { start: base, end: base === "0x1000" ? "0x1001" : "0x2001", successors, }, - ]), - instruction_scan: { scanned: 1, truncated: false }, + ], }); const dossierWithReference = ( @@ -62,7 +47,7 @@ const dossierWithReference = ( const target = base === "0x1000" ? "0x1010" : "0x2010"; return functionDossierSchema.parse({ ...dossier("return helper();", base), - outgoing_references: bounded([ + outgoing_references: [ { source_address: base, target_address: target, @@ -90,7 +75,7 @@ const dossierWithReference = ( external: false, }, }, - ]), + ], }); }; @@ -110,7 +95,6 @@ const observe = ( operation: "analyze_function", parameters: enhancedInputSchemas.analyze_function.parse({ procedure: "main", - include_assembly: true, }), result: jsonValueSchema.parse(value), confidence: "derived", @@ -119,21 +103,19 @@ const observe = ( ); describe("function comparison", () => { - it("preserves observed text changes while unavailable facets stay unknown", () => { + it("preserves text changes alongside complete inline dossier facets", () => { const result = compareFunctions( FUNCTION_COMPARISON_EXAMPLE.left, FUNCTION_COMPARISON_EXAMPLE.right, - 0, - 100, ); expect(functionComparisonResultSchema.parse(result)).toMatchObject({ - status: "unknown", + status: "changed", function_match: { status: "matched", method: "symbol" }, }); expect(result.dimensions).toEqual( expect.arrayContaining([ expect.objectContaining({ dimension: "pseudocode", status: "changed" }), - expect.objectContaining({ dimension: "assembly", status: "unknown" }), + expect.objectContaining({ dimension: "assembly", status: "unchanged" }), expect.objectContaining({ dimension: "references", status: "unchanged", @@ -151,7 +133,7 @@ describe("function comparison", () => { it("normalizes CFG relocation but preserves changed edges and constants", () => { const left = observe("2", dossier("return 0x10;", "0x1000")); const relocated = observe("3", dossier("return 0x10;", "0x2000")); - const same = compareFunctions(left, relocated, 0, 100); + const same = compareFunctions(left, relocated); expect( same.dimensions.find(({ dimension }) => dimension === "cfg"), ).toMatchObject({ @@ -162,7 +144,7 @@ describe("function comparison", () => { ).toMatchObject({ status: "unchanged" }); const changed = observe("4", dossier("return 0x20;", "0x2000", ["0x2000"])); - const comparison = compareFunctions(left, changed, 0, 100); + const comparison = compareFunctions(left, changed); expect( comparison.dimensions.find(({ dimension }) => dimension === "cfg"), ).toMatchObject({ status: "changed" }); @@ -174,20 +156,20 @@ describe("function comparison", () => { it("treats provider-specific text as unknown and validates Evidence", () => { const left = observe("5", dossier("return 0;", "0x1000"), "provider-a"); const right = observe("6", dossier("return 1;", "0x2000"), "provider-b"); - const comparison = compareFunctions(left, right, 0, 1); + const comparison = compareFunctions(left, right); expect( comparison.dimensions.find(({ dimension }) => dimension === "pseudocode"), ).toMatchObject({ status: "unknown" }); - expect(comparison.changes).toMatchObject({ limit: 1, next_offset: 1 }); + expect(comparison.changes).toHaveLength(2); expect(() => - compareFunctions({ ...left, operation: "binary_overview" }, right, 0, 10), + compareFunctions({ ...left, operation: "binary_overview" }, right), ).toThrow(/identifier/u); }); it("reports fully observed identical dossiers as unchanged", () => { const left = observe("7", dossier("return 0;\n", "0x1000")); const right = observe("8", dossier("return 0;\n", "0x2000")); - const comparison = compareFunctions(left, right, 0, 100); + const comparison = compareFunctions(left, right); expect(comparison.status).toBe("unchanged"); expect( comparison.dimensions.every(({ status }) => status === "unchanged"), @@ -198,14 +180,14 @@ describe("function comparison", () => { const left = observe("d", dossierWithReference("0x1000", "call")); const same = observe("e", dossierWithReference("0x2000", "call")); expect( - compareFunctions(left, same, 0, 100).dimensions.find( + compareFunctions(left, same).dimensions.find( ({ dimension }) => dimension === "references", ), ).toMatchObject({ status: "unchanged" }); const changed = observe("f", dossierWithReference("0x2000", "data")); expect( - compareFunctions(left, changed, 0, 100).dimensions.find( + compareFunctions(left, changed).dimensions.find( ({ dimension }) => dimension === "references", ), ).toMatchObject({ status: "changed" }); @@ -215,7 +197,7 @@ describe("function comparison", () => { dossierWithReference("0x2000", "unavailable"), ); expect( - compareFunctions(left, unavailable, 0, 100).dimensions.find( + compareFunctions(left, unavailable).dimensions.find( ({ dimension }) => dimension === "references", ), ).toMatchObject({ @@ -238,8 +220,6 @@ describe("function comparison", () => { const comparison = compareFunctions( observe("9", autoDossier("0x1000")), observe("a", autoDossier("0x2000")), - 0, - 100, ); expect(comparison.function_match.status).toBe("ambiguous"); expect( @@ -252,16 +232,14 @@ describe("function comparison", () => { const leftDossier = dossier("line\r\n", "0x1000"); const invalidCfg = functionDossierSchema.parse({ ...dossier("line\n", "0x2000"), - basic_blocks: bounded([ + basic_blocks: [ { start: "0x2000", end: "0x2001", successors: [] }, { start: "0x2000", end: "0x2002", successors: [] }, - ]), + ], }); const comparison = compareFunctions( observe("b", leftDossier), observe("c", invalidCfg), - 0, - 100, ); expect( comparison.dimensions.find(({ dimension }) => dimension === "cfg"), diff --git a/src/domain/functionComparison.ts b/src/domain/functionComparison.ts index 78e77e2b2c..9cf9b2d003 100644 --- a/src/domain/functionComparison.ts +++ b/src/domain/functionComparison.ts @@ -16,25 +16,19 @@ export { functionComparisonResultSchema, } from "./functionComparisonSchemas.js"; -/** Compare two explicit function Evidence page sets without fuzzy matching. */ +/** Compare two complete function Evidence records without fuzzy matching. */ export const compareFunctions = ( leftInput: unknown, rightInput: unknown, - offset: number, - limit: number, ): FunctionComparisonResult => { const left = parseFunctionEvidence(leftInput); const right = parseFunctionEvidence(rightInput); - const links = [ - ...left.evidence.map(({ evidence_id: id }) => id), - ...right.evidence.map(({ evidence_id: id }) => id), - ]; + const links = [left.evidence[0].evidence_id, right.evidence[0].evidence_id]; const providersDiffer = canonicalJson(left.provider) !== canonicalJson(right.provider); const dimensions = compareDimensions(left, right, links, providersDiffer); const match = functionMatch(left, right); const changes = dimensions.filter(({ status }) => status !== "unchanged"); - const page = changes.slice(offset, offset + limit); return functionComparisonResultSchema.parse({ status: overallStatus(dimensions, match.status), function_match: match, @@ -42,14 +36,7 @@ export const compareFunctions = ( right_subject_sha256: right.subject.digest.sha256, summary: summarize(dimensions), dimensions, - changes: { - items: page, - offset, - limit, - total: changes.length, - next_offset: - offset + page.length < changes.length ? offset + page.length : null, - }, + changes, limitations: [ ...new Set([ ...left.limitations.map((item) => `Left: ${item}`), diff --git a/src/domain/functionComparisonNormalization.ts b/src/domain/functionComparisonNormalization.ts index 82386a54b1..00859234f6 100644 --- a/src/domain/functionComparisonNormalization.ts +++ b/src/domain/functionComparisonNormalization.ts @@ -178,20 +178,12 @@ export const combineCoverage = ( left: FunctionCollection, right: FunctionCollection, ): FunctionCollection => { - const base = { + return { items: [...left.items, ...right.items], - total: - left.total === null || right.total === null - ? null - : left.total + right.total, + total: left.total + right.total, + complete: true, + truncated: false, }; - return left.complete && right.complete - ? { ...base, complete: true, truncated: false } - : { - ...base, - complete: false, - truncated: left.truncated || right.truncated, - }; }; export const project = ( diff --git a/src/domain/functionComparisonSchemas.ts b/src/domain/functionComparisonSchemas.ts index 19af704879..840b63e9c2 100644 --- a/src/domain/functionComparisonSchemas.ts +++ b/src/domain/functionComparisonSchemas.ts @@ -19,12 +19,10 @@ const dimensionNameSchema = z.enum([ const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u); -/** Strict bounded input for explicit function-to-function comparison. */ +/** Inputs for explicit function-to-function comparison. */ export const functionComparisonInputSchema = z.strictObject({ - left_evidence_ids: z.array(evidenceIdSchema).min(1).max(100), - right_evidence_ids: z.array(evidenceIdSchema).min(1).max(100), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(100).default(100), + left_evidence_id: evidenceIdSchema, + right_evidence_id: evidenceIdSchema, unknown_registry_approved: z.literal(true).optional(), }); @@ -97,13 +95,7 @@ export const functionComparisonResultSchema = z.object({ unknown: z.number().int().min(0), }), dimensions: z.array(functionDimensionSchema).length(8), - changes: z.object({ - items: z.array(functionDimensionSchema).max(100), - offset: z.number().int().min(0), - limit: z.number().int().min(1).max(100), - total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - }), + changes: z.array(functionDimensionSchema), limitations: z.array(z.string()), }); diff --git a/src/domain/functionDossierEvidence.ts b/src/domain/functionDossierEvidence.ts index 8356d4908c..cdaa4235e6 100644 --- a/src/domain/functionDossierEvidence.ts +++ b/src/domain/functionDossierEvidence.ts @@ -1,13 +1,6 @@ -import canonicalize from "canonicalize"; - -import { enhancedInputSchemas } from "../contracts/enhancedInputs.js"; import { parseEvidence, type Evidence } from "./evidence.js"; import { functionDossierSchema, type FunctionDossier } from "./hopperValues.js"; -const MAX_PAGES = 100; -const MAX_ITEMS = 50_000; -const MAX_PSEUDOCODE_CHARS = 2_000_000; - const DOSSIER_COLLECTION_FIELDS = [ "assembly", "comments", @@ -22,16 +15,14 @@ const DOSSIER_COLLECTION_FIELDS = [ type DossierCollectionField = (typeof DOSSIER_COLLECTION_FIELDS)[number]; type DossierItem = - FunctionDossier[Field]["items"][number]; - -type FunctionCoverage = - | { readonly complete: true; readonly truncated: false } - | { readonly complete: false; readonly truncated: boolean }; + FunctionDossier[Field][number]; export type FunctionCollection = { readonly items: readonly Item[]; - readonly total: number | null; -} & FunctionCoverage; + readonly total: number; + readonly complete: true; + readonly truncated: false; +}; type FunctionCollections = { readonly [Field in DossierCollectionField]: FunctionCollection< @@ -39,76 +30,24 @@ type FunctionCollections = { >; }; -/** Verified, bounded function observation assembled from Evidence pages. */ +/** Complete function observation parsed from one analyze_function Evidence record. */ export interface FunctionSnapshot { - readonly evidence: readonly Evidence[]; + readonly evidence: readonly [Evidence]; readonly procedure: FunctionDossier["procedure"]; readonly provider: Evidence["provider"]; readonly subject: NonNullable; readonly pseudocode: { readonly text: string; readonly total: number; - } & ( - | { readonly complete: true; readonly truncated: false } - | { readonly complete: false; readonly truncated: true } - ); + readonly complete: true; + readonly truncated: false; + }; readonly collections: FunctionCollections; - readonly instructionScan: FunctionDossier["instruction_scan"]; readonly limitations: readonly string[]; } -interface DossierPage { - readonly evidence: Omit & { - readonly subject: NonNullable; - }; - readonly dossier: FunctionDossier; - readonly parameters: ReturnType< - typeof enhancedInputSchemas.analyze_function.parse - >; -} - -/** Parse and assemble up to 100 mutually consistent analyze_function pages. */ +/** Parse one complete analyze_function Evidence record for comparison workflows. */ export const parseFunctionEvidence = (input: unknown): FunctionSnapshot => { - const values = Array.isArray(input) ? input : [input]; - if (values.length === 0 || values.length > MAX_PAGES) - throw new TypeError("Function comparison requires 1 to 100 Evidence pages"); - const pages = values.map(parsePage); - assertPageGroup(pages); - const first = pages[0]; - if (first === undefined) - throw new TypeError("Function comparison requires Evidence pages"); - const pseudocode = mergePseudocode(pages); - const collections: FunctionCollections = { - assembly: mergeCollection(pages, "assembly"), - comments: mergeCollection(pages, "comments"), - callers: mergeCollection(pages, "callers"), - callees: mergeCollection(pages, "callees"), - incoming_references: mergeCollection(pages, "incoming_references"), - outgoing_references: mergeCollection(pages, "outgoing_references"), - referenced_strings: mergeCollection(pages, "referenced_strings"), - referenced_names: mergeCollection(pages, "referenced_names"), - basic_blocks: mergeCollection(pages, "basic_blocks"), - }; - return { - evidence: pages.map(({ evidence }) => evidence), - procedure: first.dossier.procedure, - provider: first.evidence.provider, - subject: first.evidence.subject, - pseudocode, - collections, - instructionScan: first.dossier.instruction_scan, - limitations: [ - ...new Set( - pages.flatMap(({ evidence, dossier }) => [ - ...evidence.limitations, - ...dossier.limitations, - ]), - ), - ].sort((left, right) => left.localeCompare(right)), - }; -}; - -const parsePage = (input: unknown): DossierPage => { const evidence = parseEvidence(input); if (evidence.operation !== "analyze_function") throw new TypeError( @@ -116,159 +55,40 @@ const parsePage = (input: unknown): DossierPage => { ); if (evidence.subject === null) throw new TypeError("Function comparison requires artifact-bound Evidence"); + const dossier = functionDossierSchema.parse(evidence.normalized_result); return { - evidence: { ...evidence, subject: evidence.subject }, - dossier: functionDossierSchema.parse(evidence.normalized_result), - parameters: enhancedInputSchemas.analyze_function.parse( - evidence.parameters, - ), + evidence: [evidence], + procedure: dossier.procedure, + provider: evidence.provider, + subject: evidence.subject, + pseudocode: { + text: dossier.pseudocode, + total: [...dossier.pseudocode].length, + complete: true, + truncated: false, + }, + collections: { + assembly: completeCollection(dossier.assembly), + comments: completeCollection(dossier.comments), + callers: completeCollection(dossier.callers), + callees: completeCollection(dossier.callees), + incoming_references: completeCollection(dossier.incoming_references), + outgoing_references: completeCollection(dossier.outgoing_references), + referenced_strings: completeCollection(dossier.referenced_strings), + referenced_names: completeCollection(dossier.referenced_names), + basic_blocks: completeCollection(dossier.basic_blocks), + }, + limitations: [ + ...new Set([...evidence.limitations, ...dossier.limitations]), + ].sort((left, right) => left.localeCompare(right)), }; }; -const assertPageGroup = (pages: readonly DossierPage[]): void => { - const first = pages[0]; - if (first === undefined) return; - const invariant = pageInvariant(first); - for (const page of pages) - if (canonicalJson(pageInvariant(page)) !== canonicalJson(invariant)) - throw new TypeError( - "Function Evidence pages mix subjects, providers, or immutable analysis controls", - ); -}; - -const pageInvariant = (page: DossierPage) => ({ - subject: { - digest: page.evidence.subject?.digest, - format: page.evidence.subject?.format, - architecture: page.evidence.subject?.architecture, - }, - provider: page.evidence.provider, - procedure: page.dossier.procedure, - requested_procedure: page.parameters.procedure, - include_assembly: page.parameters.include_assembly, - max_instructions: page.parameters.max_instructions, - instruction_scan: page.dossier.instruction_scan, +const completeCollection = ( + items: readonly Item[], +): FunctionCollection => ({ + items, + total: items.length, + complete: true, + truncated: false, }); - -const mergePseudocode = ( - pages: readonly DossierPage[], -): FunctionSnapshot["pseudocode"] => { - const totals = new Set( - pages.map(({ dossier }) => dossier.pseudocode.total_chars), - ); - if (totals.size !== 1) - throw new TypeError("Function pseudocode pages disagree on total length"); - const total = pages[0]?.dossier.pseudocode.total_chars ?? 0; - if (total > MAX_PSEUDOCODE_CHARS) - throw new TypeError("Function pseudocode exceeds comparison limit"); - const characters = new Map(); - for (const page of pages) { - const offset = page.parameters.pseudocode_offset; - for (const [index, character] of [ - ...page.dossier.pseudocode.text, - ].entries()) - mergeIndexed(characters, offset + index, character, "pseudocode"); - if (characters.size > MAX_PSEUDOCODE_CHARS) - throw new TypeError("Function pseudocode exceeds comparison limit"); - } - const complete = hasCompleteRange(characters, total); - return { - text: orderedValues(characters).join(""), - total, - ...(complete - ? { complete: true as const, truncated: false as const } - : { complete: false as const, truncated: true as const }), - }; -}; - -const mergeCollection = ( - pages: readonly DossierPage[], - field: Field, -): FunctionCollection> => { - const totals = new Set(pages.map(({ dossier }) => dossier[field].total)); - if (totals.size !== 1) - throw new TypeError(`Function ${field} pages disagree on total count`); - const total = pages[0]?.dossier[field].total ?? null; - if (total !== null && total > MAX_ITEMS) - throw new TypeError(`Function ${field} exceeds comparison item limit`); - const items = new Map>(); - for (const page of pages) { - const offset = collectionOffset(page, field); - for (const [index, item] of page.dossier[field].items.entries()) - mergeIndexed(items, offset + index, item, field); - if (items.size > MAX_ITEMS) - throw new TypeError(`Function ${field} exceeds comparison item limit`); - } - const scanLimited = - field !== "assembly" && pageDependsOnScan(field) - ? pages.some(({ dossier }) => dossier.instruction_scan.truncated) - : false; - const unavailable = - field === "assembly" && - pages.every(({ parameters }) => !parameters.include_assembly); - const complete = - !scanLimited && - !unavailable && - total !== null && - hasCompleteRange(items, total); - return { - items: orderedValues(items), - total, - ...(complete - ? { complete: true as const, truncated: false as const } - : { - complete: false as const, - truncated: scanLimited || !unavailable, - }), - }; -}; - -const collectionOffset = ( - page: DossierPage, - field: DossierCollectionField, -): number => - field === "assembly" - ? page.parameters.assembly_offset - : page.parameters.collection_offset[field]; - -const pageDependsOnScan = (field: DossierCollectionField): boolean => - field !== "callers" && field !== "callees"; - -const mergeIndexed = ( - output: Map, - index: number, - value: Value, - field: string, -): void => { - const previous = output.get(index); - if ( - previous !== undefined && - canonicalJson(previous) !== canonicalJson(value) - ) - throw new TypeError( - `Function ${field} pages overlap with conflicting data`, - ); - output.set(index, value); -}; - -const hasCompleteRange = ( - values: ReadonlyMap, - total: number, -): boolean => { - if (values.size !== total) return false; - for (let index = 0; index < total; index += 1) - if (!values.has(index)) return false; - return true; -}; - -const orderedValues = (values: ReadonlyMap): Value[] => - [...values.entries()] - .sort(([left], [right]) => left - right) - .map(([, value]) => value); - -const canonicalJson = (value: unknown): string => { - const encoded = canonicalize(value); - if (encoded === undefined) - throw new TypeError("Function Evidence could not be canonicalized"); - return encoded; -}; diff --git a/src/domain/hopperStartupFailure.ts b/src/domain/hopperStartupFailure.ts index 646a2a2fdd..0f2734814e 100644 --- a/src/domain/hopperStartupFailure.ts +++ b/src/domain/hopperStartupFailure.ts @@ -32,7 +32,7 @@ const failures = [ [ 75, "hopper_exited_during_startup", - "Hopper exited before the REA bridge was ready. In CI, run rea doctor --provider hopper --detail full --json; if Hopper showed a UI or license prompt, complete it in the runner user session, otherwise close stale Hopper sessions and retry.", + "Hopper exited before the REA bridge was ready. In CI, run rea doctor --provider hopper --json; if Hopper showed a UI or license prompt, complete it in the runner user session, otherwise close stale Hopper sessions and retry.", ], [ 76, diff --git a/src/domain/hopperValues.fixture.ts b/src/domain/hopperValues.fixture.ts index 9ad68d903c..d62e67c18d 100644 --- a/src/domain/hopperValues.fixture.ts +++ b/src/domain/hopperValues.fixture.ts @@ -147,33 +147,24 @@ export const ghidraFunctionDossier = ( signature: "int fixture_main(void)", locals: [], }, - pseudocode: { - text: pseudocode, - total_chars: [...pseudocode].length, - returned_chars: [...pseudocode].length, - truncated: false, - next_offset: null, - }, - assembly: ghidraBounded( - includeAssembly ? ["0x401000: CALL 0x401020", "0x401005: RET"] : [], - ), - comments: ghidraBounded([]), - callers: ghidraBounded([]), - callees: ghidraBounded([]), - incoming_references: ghidraBounded([]), - outgoing_references: ghidraBounded([ghidraReferenceEdge()]), - referenced_strings: ghidraBounded([ + pseudocode, + assembly: includeAssembly + ? ["0x401000: CALL 0x401020", "0x401005: RET"] + : [], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [ghidraReferenceEdge()], + referenced_strings: [ { address: "0x402000", value: "inventory fixture", source_address: "0x401001", }, - ]), - referenced_names: ghidraBounded([]), - basic_blocks: ghidraBounded([ - { start: "0x401000", end: "0x401006", successors: [] }, - ]), - instruction_scan: { scanned: 2, truncated: false }, + ], + referenced_names: [], + basic_blocks: [{ start: "0x401000", end: "0x401006", successors: [] }], native_api: ghidraNativeApiBoundary(mappingsTruncated), limitations: [ "Unresolved computed or indirect flows without target addresses are not represented as reference edges.", diff --git a/src/domain/hopperValues.test.ts b/src/domain/hopperValues.test.ts index 6e99b56e7b..7c2e3dc1c8 100644 --- a/src/domain/hopperValues.test.ts +++ b/src/domain/hopperValues.test.ts @@ -2,7 +2,6 @@ import { describe, expect, it } from "vitest"; import { parseDocuments, - parseAddressedPage, parseListCount, parseNames, parseProcedures, @@ -63,29 +62,6 @@ describe("Hopper boundary values", () => { }); }); - it.each([ - { - items: [], - offset: 0, - limit: 100, - total: 1, - next_offset: null, - has_more: true, - }, - { - items: [], - offset: 0, - limit: 100, - total: 0, - next_offset: 100, - has_more: false, - }, - ])("rejects contradictory page continuation metadata", (page) => { - const result = parseAddressedPage(page); - expect(result.ok).toBe(false); - if (!result.ok) expect(result.error._tag).toBe("HopperProtocolError"); - }); - it.each([ ["procedures", () => parseProcedures(["not-a-map"])], ["names", () => parseNames([{ address: 1, name: "bad" }])], diff --git a/src/domain/hopperValues.ts b/src/domain/hopperValues.ts index 1d3977d59d..e3d385dd62 100644 --- a/src/domain/hopperValues.ts +++ b/src/domain/hopperValues.ts @@ -19,12 +19,6 @@ export interface SegmentSummary { readonly executable: boolean | null; } -export interface AddressedPage { - readonly items: readonly AddressedName[]; - readonly nextOffset: number | null; - readonly hasMore: boolean; -} - /** Return a bounded byte distance between canonical addresses in one space. */ export const addressDistance = (start: string, end: string): number => { const left = addressCoordinate(start); @@ -62,24 +56,6 @@ const segmentSchema = z.object({ writable: z.boolean().nullable().default(null), executable: z.boolean().nullable().default(null), }); -const addressedPageFacts = { - items: z.array(z.object({ address: z.string(), value: z.string() })), - offset: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(0), -} as const; -const addressedPageSchema = z.discriminatedUnion("has_more", [ - z.object({ - ...addressedPageFacts, - has_more: z.literal(true), - next_offset: z.number().int().min(0), - }), - z.object({ - ...addressedPageFacts, - has_more: z.literal(false), - next_offset: z.null(), - }), -]); const unavailableAnalysisFactSchema = z .object({ available: z.literal(false), reason: z.string() }) .strict(); @@ -104,50 +80,11 @@ export const localVariableSchema = z provenance: z.string().min(1), }) .strict(); -const boundedSchema = (item: T) => { - const boundedFacts = { - items: z.array(item), - total: z.number().int().min(0).nullable(), - returned: z.number().int().min(0), - } as const; - return z - .discriminatedUnion("truncated", [ - z.strictObject({ - ...boundedFacts, - truncated: z.literal(false), - next_offset: z.null(), - }), - z.strictObject({ - ...boundedFacts, - truncated: z.literal(true), - next_offset: z.number().int().min(0).nullable(), - }), - ]) - .superRefine((value, context) => { - if (value.returned !== value.items.length) { - context.addIssue({ - code: "custom", - message: "returned must equal the number of items", - path: ["returned"], - }); - } - if (value.total !== null && value.total < value.returned) { - context.addIssue({ - code: "custom", - message: "total cannot be smaller than returned", - path: ["total"], - }); - } - }); -}; - -/** Provider-neutral bounded raw-instruction window for one analyzed function. */ +/** Provider-neutral complete raw-instruction list for one analyzed function. */ export const functionInstructionWindowSchema = z .object({ procedure: procedureIdentitySchema, - instructions: boundedSchema(z.string()), - instructions_scanned: z.number().int().min(0), - instruction_scan_truncated: z.boolean(), + instructions: z.array(z.string()), limitations: z.array(z.string()), }) .strict(); @@ -196,41 +133,9 @@ export const functionDossierSchema = z locals: z.array(localVariableSchema), }) .strict(), - pseudocode: z - .discriminatedUnion("truncated", [ - z.strictObject({ - text: z.string(), - total_chars: z.number().int().min(0), - returned_chars: z.number().int().min(0), - truncated: z.literal(false), - next_offset: z.null(), - }), - z.strictObject({ - text: z.string(), - total_chars: z.number().int().min(0), - returned_chars: z.number().int().min(0), - truncated: z.literal(true), - next_offset: z.number().int().min(0).nullable(), - }), - ]) - .superRefine((value, context) => { - if (value.returned_chars !== [...value.text].length) { - context.addIssue({ - code: "custom", - message: "returned_chars must equal the text length", - path: ["returned_chars"], - }); - } - if (value.total_chars < value.returned_chars) { - context.addIssue({ - code: "custom", - message: "total_chars cannot be smaller than returned_chars", - path: ["total_chars"], - }); - } - }), - assembly: boundedSchema(z.string()), - comments: boundedSchema( + pseudocode: z.string(), + assembly: z.array(z.string()), + comments: z.array( z .object({ address: z.string(), @@ -239,11 +144,11 @@ export const functionDossierSchema = z }) .strict(), ), - callers: boundedSchema(procedureIdentitySchema), - callees: boundedSchema(procedureIdentitySchema), - incoming_references: boundedSchema(referenceEdgeSchema), - outgoing_references: boundedSchema(referenceEdgeSchema), - referenced_strings: boundedSchema( + callers: z.array(procedureIdentitySchema), + callees: z.array(procedureIdentitySchema), + incoming_references: z.array(referenceEdgeSchema), + outgoing_references: z.array(referenceEdgeSchema), + referenced_strings: z.array( z .object({ address: z.string(), @@ -252,7 +157,7 @@ export const functionDossierSchema = z }) .strict(), ), - referenced_names: boundedSchema( + referenced_names: z.array( z .object({ address: z.string(), @@ -261,7 +166,7 @@ export const functionDossierSchema = z }) .strict(), ), - basic_blocks: boundedSchema( + basic_blocks: z.array( z .object({ start: z.string(), @@ -270,9 +175,6 @@ export const functionDossierSchema = z }) .strict(), ), - instruction_scan: z - .object({ scanned: z.number().int().min(0), truncated: z.boolean() }) - .strict(), native_api: nativeApiBoundarySchema.nullable().default(null), limitations: z.array(z.string()).default([]), }) @@ -297,29 +199,10 @@ export const parseFunctionDossier = ( ); }; -/** Parse page entries and continuation metadata returned by list operations. */ -export const parseAddressedPage = ( - value: JsonValue, -): Result => { - const parsed = addressedPageSchema.safeParse(value); - return parsed.success - ? ok({ - items: parsed.data.items.map(({ address, value: name }) => ({ - address, - name, - })), - nextOffset: parsed.data.next_offset, - hasMore: parsed.data.has_more, - }) - : invalid("addressed page", parsed.error); -}; - /** Parse Hopper's direct or wrapped procedure map into stable entries. */ export const parseProcedures = ( value: JsonValue, ): Result => { - const page = parseAddressedPage(value); - if (page.ok) return ok(page.value.items); const parsed = procedureMapSchema.safeParse( unwrapProperty(value, "procedures"), ); @@ -330,7 +213,7 @@ export const parseProcedures = ( name, })), ) - : page; + : invalid("procedure map", parsed.error); }; /** Parse Hopper's direct or wrapped list of address/name records. */ @@ -396,12 +279,6 @@ export const parseListCount = ( property: string, ): Result => { const unwrapped = unwrapProperty(value, property); - const pageTotal = z - .object({ total: z.number().int().min(0) }) - .safeParse(unwrapped); - if (pageTotal.success) return ok(pageTotal.data.total); - const page = z.object({ items: z.array(z.unknown()) }).safeParse(unwrapped); - if (page.success) return ok(page.data.items.length); const list = z.array(z.unknown()).safeParse(unwrapped); if (list.success) return ok(list.data.length); const map = z.record(z.string(), z.unknown()).safeParse(unwrapped); diff --git a/src/domain/inputIssueProjection.test.ts b/src/domain/inputIssueProjection.test.ts index 1b2e48d162..1276799715 100644 --- a/src/domain/inputIssueProjection.test.ts +++ b/src/domain/inputIssueProjection.test.ts @@ -1,7 +1,6 @@ import { describe, expect, it } from "vitest"; import { z } from "zod"; -import { artifactExtractionInputSchema } from "../contracts/artifactToolContracts.js"; import { projectInputIssues } from "./inputIssueProjection.js"; describe("input issue projection", () => { @@ -27,14 +26,4 @@ describe("input issue projection", () => { }, ]); }); - - it("rejects relative extraction destinations at the caller boundary", () => { - expect( - artifactExtractionInputSchema.safeParse({ - approved: true, - output_root: "relative/output", - occurrence_ids: [`occ_${"0".repeat(64)}`], - }).success, - ).toBe(false); - }); }); diff --git a/src/domain/javascriptApplicationAnalysis.ts b/src/domain/javascriptApplicationAnalysis.ts index 8f1693112e..f5bfa97ccc 100644 --- a/src/domain/javascriptApplicationAnalysis.ts +++ b/src/domain/javascriptApplicationAnalysis.ts @@ -5,12 +5,10 @@ import { z } from "zod"; import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js"; import { javaScriptSemanticGraphSchema } from "./javascriptSemanticGraph.js"; -const MAX_GRAPH_NODES = 100_000; -const MAX_GRAPH_EDGES = 200_000; -const countSchema = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER); +const countSchema = z.number().int().min(0); const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u); -/** Default hard bounds for one local JavaScript application analysis. */ +/** Defaults for one local JavaScript application analysis. */ export const JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS = { max_entries: 8_000, max_total_artifact_bytes: 512 * 1_024 * 1_024, @@ -29,86 +27,46 @@ export const JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS = { } as const; /** Combined artifact, text, AST, and graph projection bounds. */ -export const javascriptApplicationAnalysisLimitsSchema = z - .strictObject({ - max_entries: z.number().int().min(1).max(1_000_000).default(8_000), - max_total_artifact_bytes: z - .number() - .int() - .min(1) - .max(Number.MAX_SAFE_INTEGER) - .default(512 * 1_024 * 1_024), - max_artifact_entry_bytes: z - .number() - .int() - .min(1) - .max(Number.MAX_SAFE_INTEGER) - .default(128 * 1_024 * 1_024), - max_compression_ratio: z.number().min(1).max(100_000).default(1_000), - max_depth: z.number().int().min(1).max(100).default(64), - max_path_bytes: z.number().int().min(1).max(65_535).default(4_096), - max_text_files: z.number().int().min(1).max(100_000).default(5_000), - max_total_text_bytes: z - .number() - .int() - .min(1) - .max(512 * 1_024 * 1_024) - .default(128 * 1_024 * 1_024), - max_text_file_bytes: z - .number() - .int() - .min(1) - .max(64 * 1_024 * 1_024) - .default(8 * 1_024 * 1_024), - max_ast_nodes: z.number().int().min(1).max(20_000_000).default(2_000_000), - max_findings: z.number().int().min(1).max(200_000).default(8_000), - max_modules: z.number().int().min(1).max(100_000).default(20_000), - max_source_map_sources: z.number().int().min(1).max(100_000).default(5_000), - max_parse_milliseconds: z - .number() - .int() - .min(1) - .max(300_000) - .default(30_000), - }) - .superRefine((limits, context) => { - const projectedNodes = - 7 * limits.max_entries + - 2 * limits.max_findings + - limits.max_modules + - limits.max_source_map_sources + - 1; - if (projectedNodes > MAX_GRAPH_NODES) - context.addIssue({ - code: "custom", - path: ["max_entries"], - message: - "Combined application-analysis limits can exceed the 100000-node graph contract", - }); - const projectedEdges = - 9 * limits.max_entries + - 6 * limits.max_findings + - limits.max_modules + - limits.max_source_map_sources; - if (projectedEdges > MAX_GRAPH_EDGES) - context.addIssue({ - code: "custom", - path: ["max_entries"], - message: - "Combined application-analysis limits can exceed the 200000-edge graph contract", - }); - }); +export const javascriptApplicationAnalysisLimitsSchema = z.strictObject({ + max_entries: z.number().int().min(1).default(8_000), + max_total_artifact_bytes: z + .number() + .int() + .min(1) + .default(512 * 1_024 * 1_024), + max_artifact_entry_bytes: z + .number() + .int() + .min(1) + .default(128 * 1_024 * 1_024), + max_compression_ratio: z.number().min(1).default(1_000), + max_depth: z.number().int().min(1).default(64), + max_path_bytes: z.number().int().min(1).default(4_096), + max_text_files: z.number().int().min(1).default(5_000), + max_total_text_bytes: z + .number() + .int() + .min(1) + .default(128 * 1_024 * 1_024), + max_text_file_bytes: z + .number() + .int() + .min(1) + .default(8 * 1_024 * 1_024), + max_ast_nodes: z.number().int().min(1).default(2_000_000), + max_findings: z.number().int().min(1).default(8_000), + max_modules: z.number().int().min(1).default(20_000), + max_source_map_sources: z.number().int().min(1).default(5_000), + max_parse_milliseconds: z.number().int().min(1).default(30_000), +}); -/** Public target-free request for bounded static JavaScript application analysis. */ +/** Public target-free request for static JavaScript application analysis. */ export const analyzeJavaScriptApplicationInputSchema = z.strictObject({ input_path: z .string() .min(1) - .max(16_384) .refine(isAbsolute, "JavaScript application input path must be absolute"), format: z.enum(["auto", "asar", "directory"]).default("auto"), - approved: z.literal(true), - source_map_read_approved: z.boolean().default(false), limits: javascriptApplicationAnalysisLimitsSchema.default( JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS, ), @@ -146,7 +104,6 @@ const reconstructionStatisticsSchema = z.strictObject({ text_bytes_read: countSchema, omitted_text_files: countSchema, limit_omitted_text_files: countSchema, - policy_filtered_text_files: countSchema, invalid_utf8_files: countSchema, parsed_javascript_files: countSchema, visited_ast_nodes: countSchema, @@ -156,74 +113,56 @@ const reconstructionStatisticsSchema = z.strictObject({ truncated_scopes: countSchema, }); -/** Legacy structural JavaScript application analysis result. */ -export const javaScriptApplicationAnalysisResultV1Schema = z.strictObject({ - schema_version: z.literal(1), - input_path: z.string().min(1).max(16_384), - format: z.enum(["asar", "directory"]), - root_artifact_sha256: digestSchema, - inventory_manifest_id: z.string().regex(/^agm_[a-f0-9]{64}$/u), - inventory_graph_sha256: digestSchema, - graph: javascriptApplicationGraphSchema, - summary: electronBoundarySummarySchema, - statistics: reconstructionStatisticsSchema, - limitations: z.array(z.string().min(1).max(4_096)).max(1_000), -}); - /** JavaScript application analysis with an authenticated semantic companion. */ -export const javaScriptApplicationAnalysisResultV2Schema = - javaScriptApplicationAnalysisResultV1Schema - .extend({ - schema_version: z.literal(2), - semantic_graph: javaScriptSemanticGraphSchema, - }) - .superRefine((result, context) => { - if (result.semantic_graph.application_graph_id !== result.graph.graph_id) - context.addIssue({ - code: "custom", - path: ["semantic_graph", "application_graph_id"], - message: - "Semantic graph must commit the containing application graph", - }); - if ( - result.semantic_graph.root_artifact_sha256 !== - result.root_artifact_sha256 - ) - context.addIssue({ - code: "custom", - path: ["semantic_graph", "root_artifact_sha256"], - message: "Semantic graph must commit the containing root artifact", - }); - const applicationNodeIds = new Set( - result.graph.nodes.map(({ node_id }) => node_id), - ); - for (const [nodeIndex, node] of result.semantic_graph.nodes.entries()) - for (const [ - identifierIndex, - identifier, - ] of node.application_node_ids.entries()) - if (!applicationNodeIds.has(identifier)) - context.addIssue({ - code: "custom", - path: [ - "semantic_graph", - "nodes", - nodeIndex, - "application_node_ids", - identifierIndex, - ], - message: "Semantic node references an absent application node", - }); - }); - -/** Strict versioned high-level result returned inside Evidence v2. */ -export const javascriptApplicationAnalysisResultSchema = z.discriminatedUnion( - "schema_version", - [ - javaScriptApplicationAnalysisResultV1Schema, - javaScriptApplicationAnalysisResultV2Schema, - ], -); +export const javascriptApplicationAnalysisResultSchema = z + .strictObject({ + input_path: z.string().min(1).max(16_384), + format: z.enum(["asar", "directory"]), + root_artifact_sha256: digestSchema, + inventory_manifest_id: z.string().regex(/^agm_[a-f0-9]{64}$/u), + inventory_graph_sha256: digestSchema, + graph: javascriptApplicationGraphSchema, + summary: electronBoundarySummarySchema, + statistics: reconstructionStatisticsSchema, + limitations: z.array(z.string().min(1).max(4_096)).max(1_000), + semantic_graph: javaScriptSemanticGraphSchema, + }) + .superRefine((result, context) => { + if (result.semantic_graph.application_graph_id !== result.graph.graph_id) + context.addIssue({ + code: "custom", + path: ["semantic_graph", "application_graph_id"], + message: "Semantic graph must commit the containing application graph", + }); + if ( + result.semantic_graph.root_artifact_sha256 !== result.root_artifact_sha256 + ) + context.addIssue({ + code: "custom", + path: ["semantic_graph", "root_artifact_sha256"], + message: "Semantic graph must commit the containing root artifact", + }); + const applicationNodeIds = new Set( + result.graph.nodes.map(({ node_id }) => node_id), + ); + for (const [nodeIndex, node] of result.semantic_graph.nodes.entries()) + for (const [ + identifierIndex, + identifier, + ] of node.application_node_ids.entries()) + if (!applicationNodeIds.has(identifier)) + context.addIssue({ + code: "custom", + path: [ + "semantic_graph", + "nodes", + nodeIndex, + "application_node_ids", + identifierIndex, + ], + message: "Semantic node references an absent application node", + }); + }); /** Parsed public JavaScript application analysis request. */ export type AnalyzeJavaScriptApplicationInput = z.infer< diff --git a/src/domain/javascriptApplicationChangeGraph.ts b/src/domain/javascriptApplicationChangeGraph.ts index 72c550fe0a..83242d6d40 100644 --- a/src/domain/javascriptApplicationChangeGraph.ts +++ b/src/domain/javascriptApplicationChangeGraph.ts @@ -74,7 +74,6 @@ export const buildJavaScriptApplicationChangeGraph = ( const fallbackRoot = merged.nodes[0]?.node_id; const graph = createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: rootNodeIds.length > 0 ? rootNodeIds diff --git a/src/domain/javascriptApplicationEvidenceSchemas.ts b/src/domain/javascriptApplicationEvidenceSchemas.ts index 2ba526615f..3ddeb7ed69 100644 --- a/src/domain/javascriptApplicationEvidenceSchemas.ts +++ b/src/domain/javascriptApplicationEvidenceSchemas.ts @@ -54,7 +54,6 @@ const applicationConfidenceSchema = z.enum([ const applicationUnavailableReasonSchema = z.enum([ "not-applicable", "not-observed", - "not-approved", "truncated", "provider-unavailable", "unresolved", diff --git a/src/domain/javascriptApplicationGraph.01-defines-the-complete-provider-neutral.test.ts b/src/domain/javascriptApplicationGraph.01-defines-the-complete-provider-neutral.test.ts index df5f97913d..57878b5a80 100644 --- a/src/domain/javascriptApplicationGraph.01-defines-the-complete-provider-neutral.test.ts +++ b/src/domain/javascriptApplicationGraph.01-defines-the-complete-provider-neutral.test.ts @@ -27,7 +27,7 @@ const nodeByLabel = ( }; describe("JavaScript Application Graph", () => { - it("defines the complete provider-neutral v1 node and relation vocabulary", () => { + it("defines the complete provider-neutral node and relation vocabulary", () => { expect(JAVASCRIPT_APPLICATION_NODE_KINDS).toEqual([ "package", "installer", @@ -80,7 +80,7 @@ describe("JavaScript Application Graph", () => { ]); }); - it("round-trips one canonical, versioned, byte-stable graph", () => { + it("round-trips one canonical, byte-stable graph", () => { const graph = buildSyntheticJavaScriptApplicationGraph(); const serialized = serializeJavaScriptApplicationGraph(graph); const decoded: unknown = JSON.parse(serialized); diff --git a/src/domain/javascriptApplicationGraph.02-keeps-static-observations-static-inferences.test.ts b/src/domain/javascriptApplicationGraph.02-keeps-static-observations-static-inferences.test.ts index e0ed6d9de2..56d5615687 100644 --- a/src/domain/javascriptApplicationGraph.02-keeps-static-observations-static-inferences.test.ts +++ b/src/domain/javascriptApplicationGraph.02-keeps-static-observations-static-inferences.test.ts @@ -66,7 +66,6 @@ const nodeByLabel = ( const graphForNode = (node: ApplicationNode): JavaScriptApplicationGraph => createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [node.node_id], nodes: [node], edges: [], diff --git a/src/domain/javascriptApplicationGraph.03-normalizes-structural-identity-and-evidence.test.ts b/src/domain/javascriptApplicationGraph.03-normalizes-structural-identity-and-evidence.test.ts index f4d346463a..fe4b210adf 100644 --- a/src/domain/javascriptApplicationGraph.03-normalizes-structural-identity-and-evidence.test.ts +++ b/src/domain/javascriptApplicationGraph.03-normalizes-structural-identity-and-evidence.test.ts @@ -35,7 +35,6 @@ const nodeByLabel = ( const graphForNode = (node: ApplicationNode): JavaScriptApplicationGraph => createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [node.node_id], nodes: [node], edges: [], diff --git a/src/domain/javascriptApplicationGraph.04-admits-source-map-and-observation.test.ts b/src/domain/javascriptApplicationGraph.04-admits-source-map-and-observation.test.ts index 53c908baeb..6649ceeca2 100644 --- a/src/domain/javascriptApplicationGraph.04-admits-source-map-and-observation.test.ts +++ b/src/domain/javascriptApplicationGraph.04-admits-source-map-and-observation.test.ts @@ -29,7 +29,6 @@ const firstOf = (values: readonly Value[], label: string): Value => { const graphForNode = (node: ApplicationNode): JavaScriptApplicationGraph => createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [node.node_id], nodes: [node], edges: [], @@ -84,11 +83,8 @@ describe("JavaScript Application Graph", () => { expect(graphForNode(observationScoped).nodes).toEqual([observationScoped]); }); - it("rejects unsupported versions, unknown fields, and stale commitments", () => { + it("rejects unknown fields and stale commitments", () => { const graph = buildSyntheticJavaScriptApplicationGraph(); - expect(() => - parseJavaScriptApplicationGraph({ ...graph, schema_version: 2 }), - ).toThrow(/Unsupported JavaScript Application Graph schema version: 2/u); expect(() => parseJavaScriptApplicationGraph({ ...graph, surprise: true }), ).toThrow(); diff --git a/src/domain/javascriptApplicationGraph.05-rejects-duplicate-nodes-missing-roots.test.ts b/src/domain/javascriptApplicationGraph.05-rejects-duplicate-nodes-missing-roots.test.ts index 69f90732f6..8aed516b5b 100644 --- a/src/domain/javascriptApplicationGraph.05-rejects-duplicate-nodes-missing-roots.test.ts +++ b/src/domain/javascriptApplicationGraph.05-rejects-duplicate-nodes-missing-roots.test.ts @@ -125,7 +125,6 @@ describe("JavaScript Application Graph", () => { expect( createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [preload.node_id], nodes: [preload, earlierPreload], edges: [changedFrom], @@ -147,7 +146,6 @@ describe("JavaScript Application Graph", () => { expect(() => createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [preload.node_id], nodes: [preload, runtime], edges: [invalid], diff --git a/src/domain/javascriptApplicationGraph.06-requires-every-identity-strategy-to.test.ts b/src/domain/javascriptApplicationGraph.06-requires-every-identity-strategy-to.test.ts index 9519269513..a6d95d2eba 100644 --- a/src/domain/javascriptApplicationGraph.06-requires-every-identity-strategy-to.test.ts +++ b/src/domain/javascriptApplicationGraph.06-requires-every-identity-strategy-to.test.ts @@ -56,7 +56,6 @@ const unknownEvidence = ( const graphForNode = (node: ApplicationNode): JavaScriptApplicationGraph => createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [node.node_id], nodes: [node], edges: [], diff --git a/src/domain/javascriptApplicationGraph.07-rejects-false-truncation-claims-and.test.ts b/src/domain/javascriptApplicationGraph.07-rejects-false-truncation-claims-and.test.ts index 81823cc670..4845c472ca 100644 --- a/src/domain/javascriptApplicationGraph.07-rejects-false-truncation-claims-and.test.ts +++ b/src/domain/javascriptApplicationGraph.07-rejects-false-truncation-claims-and.test.ts @@ -59,7 +59,6 @@ describe("JavaScript Application Graph", () => { expect(() => createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [validNode.node_id], nodes: [validNode], edges: [], diff --git a/src/domain/javascriptApplicationGraph.fixture.ts b/src/domain/javascriptApplicationGraph.fixture.ts index 9d07b227f8..8ffb416d5a 100644 --- a/src/domain/javascriptApplicationGraph.fixture.ts +++ b/src/domain/javascriptApplicationGraph.fixture.ts @@ -390,7 +390,6 @@ export const buildSyntheticJavaScriptApplicationGraph = return createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [packageNode.node_id], nodes, edges: buildEdges(nodes), diff --git a/src/domain/javascriptApplicationGraph.ts b/src/domain/javascriptApplicationGraph.ts index fef4d93cb6..2863003b27 100644 --- a/src/domain/javascriptApplicationGraph.ts +++ b/src/domain/javascriptApplicationGraph.ts @@ -384,11 +384,11 @@ const checkGraphInvariants = ( }); }; -/** Strict versioned JavaScript Application Graph with verified commitments. */ +/** Strict JavaScript Application Graph with verified commitments. */ export const javascriptApplicationGraphSchema = javascriptApplicationGraphRecordSchema.superRefine(checkGraphInvariants); -/** Fully validated JavaScript Application Graph v1. */ +/** Fully validated JavaScript Application Graph. */ export type JavaScriptApplicationGraph = z.infer< typeof javascriptApplicationGraphSchema >; @@ -465,24 +465,10 @@ export const createJavaScriptApplicationGraph = ( }); }; -/** Parse a stored graph, rejecting unsupported versions and stale IDs. */ +/** Parse a stored graph and reject stale IDs. */ export const parseJavaScriptApplicationGraph = ( input: unknown, -): JavaScriptApplicationGraph => { - const envelope = z - .object({ schema: z.string(), schema_version: z.number() }) - .passthrough() - .safeParse(input); - if ( - envelope.success && - envelope.data.schema === "JavaScriptApplicationGraph" && - envelope.data.schema_version !== 1 - ) - throw new TypeError( - `Unsupported JavaScript Application Graph schema version: ${String(envelope.data.schema_version)}`, - ); - return javascriptApplicationGraphSchema.parse(input); -}; +): JavaScriptApplicationGraph => javascriptApplicationGraphSchema.parse(input); /** Compute the byte-stable SHA-256 commitment of a verified graph. */ export const computeJavaScriptApplicationGraphSha256 = ( diff --git a/src/domain/javascriptApplicationGraphSchemas.ts b/src/domain/javascriptApplicationGraphSchemas.ts index 25430f8ba2..adebd9e3bb 100644 --- a/src/domain/javascriptApplicationGraphSchemas.ts +++ b/src/domain/javascriptApplicationGraphSchemas.ts @@ -10,7 +10,7 @@ import { jsonValueSchema } from "./jsonValue.js"; const boundedTextSchema = z.string().min(1).max(4_096); -/** Node kinds admitted by JavaScript Application Graph v1. */ +/** Node kinds admitted by JavaScript Application Graph. */ export const JAVASCRIPT_APPLICATION_NODE_KINDS = [ "package", "installer", @@ -51,7 +51,7 @@ export const JAVASCRIPT_APPLICATION_NODE_KINDS = [ /** Provider-neutral application entity categories. */ const applicationNodeKindSchema = z.enum(JAVASCRIPT_APPLICATION_NODE_KINDS); -/** Directed relations admitted by JavaScript Application Graph v1. */ +/** Directed relations admitted by JavaScript Application Graph. */ export const JAVASCRIPT_APPLICATION_RELATIONS = [ "contains", "loads", @@ -144,18 +144,14 @@ export const applicationEdgeSchema = applicationEdgeInputSchema.extend({ /** Graph content before its top-level semantic identifier is derived. */ export const javascriptApplicationGraphInputSchema = z.strictObject({ schema: z.literal("JavaScriptApplicationGraph"), - schema_version: z.literal(1), - root_node_ids: z - .array(z.string().regex(/^jag_node_[a-f0-9]{64}$/u)) - .min(1) - .max(1_000), - nodes: z.array(applicationNodeSchema).min(1).max(100_000), - edges: z.array(applicationEdgeSchema).max(200_000), + root_node_ids: z.array(z.string().regex(/^jag_node_[a-f0-9]{64}$/u)).min(1), + nodes: z.array(applicationNodeSchema).min(1), + edges: z.array(applicationEdgeSchema), coverage: applicationCoverageSchema, limitations: z.array(boundedTextSchema).max(1_000), }); -/** Strict stored shape for JavaScript Application Graph v1. */ +/** Strict stored shape for a JavaScript Application Graph. */ export const javascriptApplicationGraphRecordSchema = javascriptApplicationGraphInputSchema.extend({ graph_id: z.string().regex(/^jag_[a-f0-9]{64}$/u), @@ -165,7 +161,7 @@ export const javascriptApplicationGraphRecordSchema = export type ApplicationNode = z.infer; /** Immutable relationship in a JavaScript Application Graph. */ export type ApplicationEdge = z.infer; -/** Complete v1 graph content before its graph identifier is derived. */ +/** Complete graph content before its graph identifier is derived. */ export type JavaScriptApplicationGraphInput = z.infer< typeof javascriptApplicationGraphInputSchema >; diff --git a/src/domain/javascriptApplicationVersionComparison.ts b/src/domain/javascriptApplicationVersionComparison.ts index 0021ebdeb2..eb65138835 100644 --- a/src/domain/javascriptApplicationVersionComparison.ts +++ b/src/domain/javascriptApplicationVersionComparison.ts @@ -71,7 +71,6 @@ export const compareJavaScriptApplicationVersions = ( }; const coverage = comparisonCoverage(input, omissions); const semantic = { - schema_version: 1 as const, left: { evidence_id: input.left.evidenceId, graph_id: input.left.graph.graph_id, diff --git a/src/domain/javascriptApplicationVersionComparisonSchemas.ts b/src/domain/javascriptApplicationVersionComparisonSchemas.ts index 225cf21673..ff9869cb0b 100644 --- a/src/domain/javascriptApplicationVersionComparisonSchemas.ts +++ b/src/domain/javascriptApplicationVersionComparisonSchemas.ts @@ -216,7 +216,6 @@ const comparisonCoverageSchema = z.union([ /** Tiered module/entity matching plus a bounded cross-version change graph. */ export const applicationVersionComparisonResultSchema = z .strictObject({ - schema_version: z.literal(1), comparison_id: z.string().regex(/^javc_[a-f0-9]{64}$/u), left: z.strictObject({ evidence_id: evidenceIdSchema, diff --git a/src/domain/javascriptExportShapeComparison.ts b/src/domain/javascriptExportShapeComparison.ts index c49bc2bd14..f9289f0336 100644 --- a/src/domain/javascriptExportShapeComparison.ts +++ b/src/domain/javascriptExportShapeComparison.ts @@ -78,7 +78,6 @@ export const compareJavaScriptExportShapes = ( }); const limitations = comparisonLimitations(left, right, coverage.status); const semantic = { - schema_version: 1 as const, left: left.selection, right: right.selection, summary: summarize(allChanges), diff --git a/src/domain/javascriptExportShapeComparisonSchemas.ts b/src/domain/javascriptExportShapeComparisonSchemas.ts index 716f8489aa..312c604f36 100644 --- a/src/domain/javascriptExportShapeComparisonSchemas.ts +++ b/src/domain/javascriptExportShapeComparisonSchemas.ts @@ -257,7 +257,6 @@ const comparisonChangeSchema = z.strictObject({ /** Bounded static export-return comparison with explicit unknown semantics. */ export const javaScriptExportShapeComparisonResultSchema = z.strictObject({ - schema_version: z.literal(1), comparison_id: z.string().regex(/^jesc_[a-f0-9]{64}$/u), left: selectorResultSchema, right: selectorResultSchema, diff --git a/src/domain/javascriptFeatureTrace.ts b/src/domain/javascriptFeatureTrace.ts index 18794e6631..ad46099ed3 100644 --- a/src/domain/javascriptFeatureTrace.ts +++ b/src/domain/javascriptFeatureTrace.ts @@ -32,10 +32,9 @@ export interface ApplicationFeatureTraceProjectionInput { readonly nativeEvidence: readonly Evidence[]; readonly seed: TraceApplicationFeatureInput["seed"]; readonly direction: TraceApplicationFeatureInput["direction"]; - readonly limits: TraceApplicationFeatureInput["limits"]; } -/** Trace a literal feature through a bounded, authority-preserving JAG. */ +/** Trace a literal feature through its complete reachable, authority-preserving JAG. */ export const traceApplicationFeature = ( input: ApplicationFeatureTraceProjectionInput, ): ApplicationFeatureTraceResult => { @@ -43,22 +42,15 @@ export const traceApplicationFeature = ( input.graph.nodes, input.seed, ); - const seedMatches = allSeedMatches.slice(0, input.limits.max_seed_matches); + const seedMatches = allSeedMatches; if (seedMatches.length === 0) return noMatchResult(input); const traversal = traverseApplicationFeature( input.graph, seedMatches.map(({ node_id: id }) => id), input.direction, - input.limits, ); - const graph = traceGraph( - input, - seedMatches, - traversal, - allSeedMatches.length, - ); - const allPaths = terminalPaths(traversal, seedMatches); - const paths = allPaths.slice(0, input.limits.max_paths); + const graph = traceGraph(input, seedMatches, traversal); + const paths = terminalPaths(traversal, seedMatches); const nativeHandoffs = buildJavaScriptNativeHandoffs( traversal.nodes, traversal.edges, @@ -68,14 +60,7 @@ export const traceApplicationFeature = ( input.sourceEvidenceId, ...nativeHandoffs.flatMap(({ evidence_ids: ids }) => ids), ]); - const omissions = traceOmissions( - input, - traversal, - allSeedMatches.length, - allPaths.length, - ); const semantic = { - schema_version: 1 as const, source_evidence_id: input.sourceEvidenceId, source_graph_id: input.graph.graph_id, seed: input.seed, @@ -93,15 +78,12 @@ export const traceApplicationFeature = ( ...factSummary(traversal.nodes, traversal.edges), }, coverage: { - status: traceCoverageStatus(input.graph, omissions), + status: traceCoverageStatus(input.graph), source_graph_status: input.graph.coverage.status, - scanned_nodes: input.graph.nodes.length, total_seed_matches: allSeedMatches.length, - ...omissions, - frontier_node_ids: traversal.frontierNodeIds, }, evidence_links: evidenceLinks, - limitations: traceLimitations(input.graph, omissions), + limitations: traceLimitations(input.graph), }; return applicationFeatureTraceResultSchema.parse({ ...semantic, @@ -113,7 +95,6 @@ const noMatchResult = ( input: ApplicationFeatureTraceProjectionInput, ): ApplicationFeatureTraceResult => { const semantic = { - schema_version: 1 as const, source_evidence_id: input.sourceEvidenceId, source_graph_id: input.graph.graph_id, seed: input.seed, @@ -136,13 +117,7 @@ const noMatchResult = ( coverage: { status: "no-match" as const, source_graph_status: input.graph.coverage.status, - scanned_nodes: input.graph.nodes.length, total_seed_matches: 0, - omitted_seed_matches: 0, - omitted_nodes: 0, - omitted_edges: 0, - omitted_paths: 0, - frontier_node_ids: [], }, evidence_links: [input.sourceEvidenceId], limitations: uniqueSorted([ @@ -160,50 +135,23 @@ const traceGraph = ( input: ApplicationFeatureTraceProjectionInput, seedMatches: readonly ApplicationFeatureSeedMatch[], traversal: ApplicationFeatureTraversal, - totalSeedMatches: number, ): JavaScriptApplicationGraph => { - const omitted = - traversal.omittedNodeCount + - traversal.omittedEdgeCount + - (totalSeedMatches - seedMatches.length); return createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: uniqueSorted(seedMatches.map(({ node_id: id }) => id)), nodes: traversal.nodes, edges: traversal.edges, - coverage: traceGraphCoverage(input.graph, input.limits, omitted), + coverage: traceGraphCoverage(input.graph), limitations: uniqueSorted([ ...input.graph.limitations, "Trace edges retain their source authority; graph connectivity does not prove runtime execution or reachability.", - ...(omitted === 0 - ? [] - : ["Trace output stopped at explicit caller bounds."]), ]), }); }; const traceGraphCoverage = ( source: JavaScriptApplicationGraph, - limits: TraceApplicationFeatureInput["limits"], - omitted: number, ): JavaScriptApplicationGraph["coverage"] => { - if (omitted > 0) - return { - status: "partial", - truncated: true, - omitted_count: omitted, - limits: [ - { - name: "max-seed-matches", - value: limits.max_seed_matches, - unit: "items", - }, - { name: "max-depth", value: limits.max_depth, unit: "depth" }, - { name: "max-nodes", value: limits.max_nodes, unit: "items" }, - { name: "max-edges", value: limits.max_edges, unit: "items" }, - ], - }; return source.coverage.status === "complete" ? { status: "complete", truncated: false, omitted_count: 0, limits: [] } : source.coverage; @@ -284,43 +232,17 @@ const factSummary = ( }; }; -const traceOmissions = ( - input: ApplicationFeatureTraceProjectionInput, - traversal: ApplicationFeatureTraversal, - seedMatches: number, - paths: number, -) => ({ - omitted_seed_matches: Math.max( - 0, - seedMatches - input.limits.max_seed_matches, - ), - omitted_nodes: traversal.omittedNodeCount, - omitted_edges: traversal.omittedEdgeCount, - omitted_paths: Math.max(0, paths - input.limits.max_paths), -}); - const traceCoverageStatus = ( graph: JavaScriptApplicationGraph, - omissions: ReturnType, ): ApplicationFeatureTraceResult["coverage"]["status"] => - Object.values(omissions).some((value) => value > 0) - ? "truncated" - : graph.coverage.status === "complete" - ? "complete-within-source" - : "partial"; + graph.coverage.status === "complete" ? "complete-within-source" : "partial"; -const traceLimitations = ( - graph: JavaScriptApplicationGraph, - omissions: ReturnType, -): string[] => +const traceLimitations = (graph: JavaScriptApplicationGraph): string[] => uniqueSorted([ "A trace reports graph relationships, not proof that code executed or that a feature is reachable in every state.", "Static, native, passive-runtime, inferred, and unknown facts retain their original authority in the returned graph.", "Native handoffs never open a binary or invoke a provider automatically; snapshot reuse remains provider/profile/target exact.", ...sourceCoverageLimitations(graph), - ...(Object.values(omissions).some((value) => value > 0) - ? ["Trace results were truncated at explicit caller limits."] - : []), ]); const sourceCoverageLimitations = ( diff --git a/src/domain/javascriptFeatureTraceSchemas.ts b/src/domain/javascriptFeatureTraceSchemas.ts index 00119218e8..ab2ed5aebc 100644 --- a/src/domain/javascriptFeatureTraceSchemas.ts +++ b/src/domain/javascriptFeatureTraceSchemas.ts @@ -7,7 +7,7 @@ const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u); const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const nodeIdSchema = z.string().regex(/^jag_node_[a-f0-9]{64}$/u); const edgeIdSchema = z.string().regex(/^jag_edge_[a-f0-9]{64}$/u); -const boundedTextSchema = z.string().min(1).max(4_096); +const boundedTextSchema = z.string().min(1); /** Literal starting point for one bounded application trace. */ const applicationFeatureSeedSchema = z.strictObject({ @@ -25,28 +25,13 @@ const applicationFeatureSeedSchema = z.strictObject({ case_sensitive: z.boolean().default(false), }); -const featureTraceLimitsSchema = z.strictObject({ - max_seed_matches: z.number().int().min(1).max(1_000).default(25), - max_depth: z.number().int().min(0).max(64).default(12), - max_nodes: z.number().int().min(1).max(50_000).default(2_000), - max_edges: z.number().int().min(1).max(100_000).default(4_000), - max_paths: z.number().int().min(1).max(1_000).default(100), -}); - -/** Evidence-backed application graph and explicit trace bounds. */ +/** Evidence-backed application graph and feature seed. */ export const traceApplicationFeatureInputSchema = z .strictObject({ application: evidenceSchema, - native_observations: z.array(evidenceSchema).max(64).default([]), + native_observations: z.array(evidenceSchema).default([]), seed: applicationFeatureSeedSchema, direction: z.enum(["outgoing", "incoming", "both"]).default("both"), - limits: featureTraceLimitsSchema.default({ - max_seed_matches: 25, - max_depth: 12, - max_nodes: 2_000, - max_edges: 4_000, - max_paths: 100, - }), }) .superRefine((input, context) => { const ids = input.native_observations.map(({ evidence_id: id }) => id); @@ -60,56 +45,53 @@ export const traceApplicationFeatureInputSchema = z const seedMatchSchema = z.strictObject({ node_id: nodeIdSchema, - kind: z.string().min(1).max(128), + kind: z.string().min(1), basis: z.enum(["node-id", "label", "identity", "property"]), - field: z.string().min(1).max(256), + field: z.string().min(1), }); const tracePathSchema = z.strictObject({ path_id: z.string().regex(/^jatp_[a-f0-9]{64}$/u), start_node_id: nodeIdSchema, end_node_id: nodeIdSchema, - end_kind: z.string().min(1).max(128), - node_ids: z.array(nodeIdSchema).min(1).max(65), - edge_ids: z.array(edgeIdSchema).max(64), - authorities: z.array(z.string().min(1).max(128)).max(16), + end_kind: z.string().min(1), + node_ids: z.array(nodeIdSchema).min(1), + edge_ids: z.array(edgeIdSchema), + authorities: z.array(z.string().min(1)), contains_inference: z.boolean(), }); const nativeHandoffSchema = z.strictObject({ native_node_id: nodeIdSchema, artifact_sha256: digestSchema, - artifact_path: z.string().min(1).max(4_096).nullable(), - export_node_ids: z.array(nodeIdSchema).max(1_000), - requested_exports: z.array(boundedTextSchema).max(1_000), + artifact_path: z.string().min(1).nullable(), + export_node_ids: z.array(nodeIdSchema), + requested_exports: z.array(boundedTextSchema), status: z.enum(["evidence-linked", "requires-provider-analysis"]), - providers: z.array(providerSchema).max(64), - evidence_ids: z.array(evidenceIdSchema).max(64), - recommended_tools: z - .array( - z.enum([ - "open_binary", - "binary_overview", - "search_procedures", - "analyze_function", - "xrefs", - ]), - ) - .max(5), + providers: z.array(providerSchema), + evidence_ids: z.array(evidenceIdSchema), + recommended_tools: z.array( + z.enum([ + "open_binary", + "binary_overview", + "search_procedures", + "analyze_function", + "xrefs", + ]), + ), }); -/** Evidence-preserving bounded subgraph and native-analysis frontiers. */ +/** Evidence-preserving complete reachable subgraph and native-analysis handoffs. */ export const applicationFeatureTraceResultSchema = z.strictObject({ - schema_version: z.literal(1), trace_id: z.string().regex(/^jatr_[a-f0-9]{64}$/u), source_evidence_id: evidenceIdSchema, source_graph_id: z.string().regex(/^jag_[a-f0-9]{64}$/u), seed: applicationFeatureSeedSchema, direction: z.enum(["outgoing", "incoming", "both"]), - seed_matches: z.array(seedMatchSchema).max(1_000), + seed_matches: z.array(seedMatchSchema), graph: javascriptApplicationGraphSchema.nullable(), - paths: z.array(tracePathSchema).max(1_000), - native_handoffs: z.array(nativeHandoffSchema).max(10_000), + paths: z.array(tracePathSchema), + native_handoffs: z.array(nativeHandoffSchema), summary: z.strictObject({ matched_seeds: z.number().int().min(0), traced_nodes: z.number().int().min(0), @@ -122,28 +104,17 @@ export const applicationFeatureTraceResultSchema = z.strictObject({ unavailable_facts: z.number().int().min(0), }), coverage: z.strictObject({ - status: z.enum([ - "complete-within-source", - "partial", - "truncated", - "no-match", - ]), + status: z.enum(["complete-within-source", "partial", "no-match"]), source_graph_status: z.enum([ "complete", "partial", "unknown", "unavailable", ]), - scanned_nodes: z.number().int().min(0), total_seed_matches: z.number().int().min(0), - omitted_seed_matches: z.number().int().min(0), - omitted_nodes: z.number().int().min(0), - omitted_edges: z.number().int().min(0), - omitted_paths: z.number().int().min(0), - frontier_node_ids: z.array(nodeIdSchema).max(50_000), }), - evidence_links: z.array(evidenceIdSchema).min(1).max(65), - limitations: z.array(boundedTextSchema).max(1_000), + evidence_links: z.array(evidenceIdSchema).min(1), + limitations: z.array(boundedTextSchema), }); export type TraceApplicationFeatureInput = z.infer< diff --git a/src/domain/javascriptFeatureTraversal.ts b/src/domain/javascriptFeatureTraversal.ts index e5854b84de..0e5e154eb4 100644 --- a/src/domain/javascriptFeatureTraversal.ts +++ b/src/domain/javascriptFeatureTraversal.ts @@ -4,7 +4,6 @@ import { type ApplicationNode, type JavaScriptApplicationGraph, } from "./javascriptApplicationGraph.js"; -import type { TraceApplicationFeatureInput } from "./javascriptFeatureTraceSchemas.js"; interface AdjacencyEntry { readonly edge: ApplicationEdge; @@ -16,73 +15,33 @@ interface Predecessor { readonly edgeId: string; } -/** Bounded graph projection plus the first deterministic path to each node. */ +/** Complete reachable graph projection plus the first deterministic path to each node. */ export interface ApplicationFeatureTraversal { readonly nodes: ApplicationNode[]; readonly edges: ApplicationEdge[]; - readonly depths: ReadonlyMap; readonly predecessors: ReadonlyMap; - readonly frontierNodeIds: string[]; - readonly omittedNodeCount: number; - readonly omittedEdgeCount: number; } /** Traverse a JAG without treating edge inference as observed reachability. */ export const traverseApplicationFeature = ( graph: JavaScriptApplicationGraph, seedNodeIds: readonly string[], - direction: TraceApplicationFeatureInput["direction"], - limits: TraceApplicationFeatureInput["limits"], + direction: "outgoing" | "incoming" | "both", ): ApplicationFeatureTraversal => { const nodeById = new Map(graph.nodes.map((node) => [node.node_id, node])); const adjacency = buildAdjacency(graph.edges, direction); const visited = new Set(seedNodeIds); const retainedEdges = new Map(); - const omittedNodes = new Set(); - const omittedEdges = new Set(); - const frontier = new Set(); - const depths = new Map(seedNodeIds.map((nodeId) => [nodeId, 0])); const predecessors = new Map(); const queue = [...seedNodeIds]; for (let offset = 0; offset < queue.length; offset += 1) { const current = queue[offset]; if (current === undefined) continue; - const depth = depths.get(current) ?? 0; for (const entry of adjacency.get(current) ?? []) { - if (depth >= limits.max_depth) { - recordOmission({ - entry, - current, - omittedNodes, - omittedEdges, - frontier, - }); - continue; - } - if (!visited.has(entry.nextNodeId) && visited.size >= limits.max_nodes) { - recordOmission({ - entry, - current, - omittedNodes, - omittedEdges, - frontier, - }); - continue; - } - if ( - !retainedEdges.has(entry.edge.edge_id) && - retainedEdges.size >= limits.max_edges - ) { - omittedEdges.add(entry.edge.edge_id); - frontier.add(current); - frontier.add(entry.nextNodeId); - continue; - } retainedEdges.set(entry.edge.edge_id, entry.edge); if (visited.has(entry.nextNodeId)) continue; if (!nodeById.has(entry.nextNodeId)) continue; visited.add(entry.nextNodeId); - depths.set(entry.nextNodeId, depth + 1); predecessors.set(entry.nextNodeId, { previousNodeId: current, edgeId: entry.edge.edge_id, @@ -98,17 +57,13 @@ export const traverseApplicationFeature = ( edges: [...retainedEdges.values()].sort((left, right) => compareCodePoints(left.edge_id, right.edge_id), ), - depths, predecessors, - frontierNodeIds: [...frontier].sort(compareCodePoints), - omittedNodeCount: omittedNodes.size, - omittedEdgeCount: omittedEdges.size, }; }; const buildAdjacency = ( edges: readonly ApplicationEdge[], - direction: TraceApplicationFeatureInput["direction"], + direction: "outgoing" | "incoming" | "both", ): ReadonlyMap => { const adjacency = new Map(); for (const edge of edges) { @@ -140,18 +95,3 @@ const addAdjacency = ( ): void => { adjacency.set(nodeId, [...(adjacency.get(nodeId) ?? []), entry]); }; - -interface OmissionContext { - readonly entry: AdjacencyEntry; - readonly current: string; - readonly omittedNodes: Set; - readonly omittedEdges: Set; - readonly frontier: Set; -} - -const recordOmission = (context: OmissionContext): void => { - context.omittedNodes.add(context.entry.nextNodeId); - context.omittedEdges.add(context.entry.edge.edge_id); - context.frontier.add(context.current); - context.frontier.add(context.entry.nextNodeId); -}; diff --git a/src/domain/javascriptReplay.ts b/src/domain/javascriptReplay.ts index 6ae3035f61..68819ec918 100644 --- a/src/domain/javascriptReplay.ts +++ b/src/domain/javascriptReplay.ts @@ -321,7 +321,6 @@ const replayOutcomeSchema = z.discriminatedUnion("outcome", [ export const replayExecutionResultSchema = z .object({ - schema_version: z.literal(1), plan_digest: digestSchema, outcomes: z.array(replayOutcomeSchema), comparison: z diff --git a/src/domain/javascriptRuntimeObservation.ts b/src/domain/javascriptRuntimeObservation.ts index db89326f79..d2504af60e 100644 --- a/src/domain/javascriptRuntimeObservation.ts +++ b/src/domain/javascriptRuntimeObservation.ts @@ -57,8 +57,6 @@ const requireRuntimeScope = ( export const listJavaScriptRuntimeTargetsInputSchema = z .strictObject({ ...approvedRuntimeScope, - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(200).default(100), }) .superRefine(requireRuntimeScope); export type ListJavaScriptRuntimeTargetsInput = z.infer< @@ -138,18 +136,10 @@ const javascriptRuntimeTargetSchema = z.strictObject({ location: javascriptRuntimeLocationSchema, }); -/** Root/origin-filtered V8 Inspector target inventory. */ +/** Complete root/origin-filtered V8 Inspector target inventory. */ export const javascriptRuntimeTargetListSchema = z.strictObject({ - schema_version: z.literal(1), runtime: javascriptRuntimeVersionSchema, - targets: z.strictObject({ - items: z.array(javascriptRuntimeTargetSchema), - offset: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), - }), + targets: z.array(javascriptRuntimeTargetSchema), excluded: z.strictObject({ outside_file_roots: z.number().int().min(0), outside_origins: z.number().int().min(0), @@ -181,7 +171,6 @@ const javascriptRuntimeContextSchema = z.strictObject({ /** Deterministic passive script/context snapshot from one bounded window. */ export const javascriptRuntimeObservationSchema = z.strictObject({ - schema_version: z.literal(1), runtime: javascriptRuntimeVersionSchema, target: javascriptRuntimeTargetSchema.extend({ runtime_kind: javascriptRuntimeKindSchema, diff --git a/src/domain/javascriptRuntimeReconciliationGraph.ts b/src/domain/javascriptRuntimeReconciliationGraph.ts index 2d9ba26f9c..d99fd0a2a2 100644 --- a/src/domain/javascriptRuntimeReconciliationGraph.ts +++ b/src/domain/javascriptRuntimeReconciliationGraph.ts @@ -54,7 +54,6 @@ export const buildReconciledApplicationGraph = ( ); const graph = createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: bounded.rootNodeIds, nodes: bounded.nodes, edges: bounded.edges, diff --git a/src/domain/javascriptRuntimeReconciliationParsing.ts b/src/domain/javascriptRuntimeReconciliationParsing.ts index 2813e16df9..4f37ee5f92 100644 --- a/src/domain/javascriptRuntimeReconciliationParsing.ts +++ b/src/domain/javascriptRuntimeReconciliationParsing.ts @@ -49,7 +49,6 @@ export interface ParsedStaticLayer { readonly result: JavaScriptApplicationAnalysisResult; readonly graph: JavaScriptApplicationGraph; readonly runtimeMappings: readonly RuntimeMapping[]; - readonly sourceMapReadApproved: boolean; } interface RuntimeCaptureBase { @@ -153,7 +152,7 @@ const parseStaticLayer = (layer: StaticLayerInput): ParsedStaticLayer => { ); assertEvidenceIdentity(evidence, { operation: "analyze_javascript_application", - predicate: `rea.javascript-application-analysis/v${String(result.schema_version)}`, + predicate: "rea.javascript-application-analysis", providerId: "rea-javascript-application", providerName: "REA JavaScript application analyzer", providerVersion: "1", @@ -169,13 +168,6 @@ const parseStaticLayer = (layer: StaticLayerInput): ParsedStaticLayer => { throw new TypeError( "JavaScript application Evidence subject disagrees with its result", ); - const parameters = z - .object({ - approved: z.literal(true), - source_map_read_approved: z.boolean(), - }) - .passthrough() - .parse(evidence.parameters); return { layerId: `jrl_${digestCanonical({ role: layer.role, @@ -187,7 +179,6 @@ const parseStaticLayer = (layer: StaticLayerInput): ParsedStaticLayer => { result, graph: result.graph, runtimeMappings: layer.runtime_mappings, - sourceMapReadApproved: parameters.source_map_read_approved, }; }; diff --git a/src/domain/javascriptRuntimeReconciliationResult.ts b/src/domain/javascriptRuntimeReconciliationResult.ts index 78d8b29934..6a6bf5f240 100644 --- a/src/domain/javascriptRuntimeReconciliationResult.ts +++ b/src/domain/javascriptRuntimeReconciliationResult.ts @@ -36,7 +36,6 @@ export const createJavaScriptRuntimeReconciliationResult = ( ): JavaScriptRuntimeReconciliationResult => { const completion = completionFlags(input); const semantic = { - schema_version: 1 as const, static_layers: staticLayerSummaries(input.layers), runtime_captures: captureSummaries(input.captures, input.runtime), graph: input.graph, @@ -127,9 +126,7 @@ const sourceMapAuthority = ( input: ReconciliationProjection, ): JavaScriptRuntimeReconciliationResult["source_map_authority"] => ({ used_for_primary_matching: false, - static_layers_with_read_approval: input.layers.filter( - ({ sourceMapReadApproved }) => sourceMapReadApproved, - ).length, + static_layer_count: input.layers.length, runtime_script_declarations: input.captures.reduce( (total, capture) => total + diff --git a/src/domain/javascriptRuntimeReconciliationSchemas.ts b/src/domain/javascriptRuntimeReconciliationSchemas.ts index 05f603b1ec..885548ffda 100644 --- a/src/domain/javascriptRuntimeReconciliationSchemas.ts +++ b/src/domain/javascriptRuntimeReconciliationSchemas.ts @@ -256,7 +256,6 @@ const staticLoadStateSchema = z.strictObject({ /** Deterministic static/passive-runtime reconciliation with a combined JAG. */ export const javascriptRuntimeReconciliationResultSchema = z.strictObject({ - schema_version: z.literal(1), reconciliation_id: z.string().regex(/^jrr_[a-f0-9]{64}$/u), static_layers: z.array(layerSummarySchema).min(1).max(8), runtime_captures: z.array(captureSummarySchema).min(1).max(32), @@ -279,7 +278,7 @@ export const javascriptRuntimeReconciliationResultSchema = z.strictObject({ static_load_states: z.array(staticLoadStateSchema).max(50_000), source_map_authority: z.strictObject({ used_for_primary_matching: z.literal(false), - static_layers_with_read_approval: z.number().int().min(0), + static_layer_count: z.number().int().min(0), runtime_script_declarations: z.number().int().min(0), limitation: boundedTextSchema, }), diff --git a/src/domain/javascriptSemanticGraph.ts b/src/domain/javascriptSemanticGraph.ts index 6315256904..febe08ccae 100644 --- a/src/domain/javascriptSemanticGraph.ts +++ b/src/domain/javascriptSemanticGraph.ts @@ -474,7 +474,7 @@ const checkGraph = (graph: GraphRecord, context: z.RefinementCtx): void => { export const javaScriptSemanticGraphSchema = javaScriptSemanticGraphRecordSchema.superRefine(checkGraph); -/** Fully validated JavaScript Semantic Relation Graph v1. */ +/** Fully validated JavaScript Semantic Relation Graph. */ export type JavaScriptSemanticGraph = z.infer< typeof javaScriptSemanticGraphSchema >; diff --git a/src/domain/javascriptSemanticGraphQuery.test.ts b/src/domain/javascriptSemanticGraphQuery.test.ts index c8b4850e48..b0d3a3c4fa 100644 --- a/src/domain/javascriptSemanticGraphQuery.test.ts +++ b/src/domain/javascriptSemanticGraphQuery.test.ts @@ -196,7 +196,6 @@ const fixtureGraph = (withUnknown = false): JavaScriptSemanticGraph => { }); return createJavaScriptSemanticGraph({ schema: "JavaScriptSemanticRelationGraph", - schema_version: 1, root_artifact_sha256: SHA, application_graph_id: JAG_ID, root_node_ids: [module.node_id], @@ -216,7 +215,7 @@ const fixtureGraph = (withUnknown = false): JavaScriptSemanticGraph => { }); }; -it("defines every required v1 relation family and canonicalizes records", () => { +it("defines every required relation family and canonicalizes records", () => { expect(JAVASCRIPT_SEMANTIC_RELATIONS).toContain("argument-to-parameter"); expect(JAVASCRIPT_SEMANTIC_RELATIONS).toContain("detaches-task"); expect(JAVASCRIPT_SEMANTIC_RELATIONS).toContain("forwards-signal"); diff --git a/src/domain/javascriptSemanticGraphSchemas.ts b/src/domain/javascriptSemanticGraphSchemas.ts index ad72461471..445d91ce1b 100644 --- a/src/domain/javascriptSemanticGraphSchemas.ts +++ b/src/domain/javascriptSemanticGraphSchemas.ts @@ -14,7 +14,7 @@ const semanticUnknownIdSchema = z .string() .regex(/^jsrg_unknown_[a-f0-9]{64}$/u); -/** Semantic entity kinds admitted by JavaScript Semantic Relation Graph v1. */ +/** Semantic entity kinds admitted by JavaScript Semantic Relation Graph. */ export const JAVASCRIPT_SEMANTIC_NODE_KINDS = [ "module", "function", @@ -58,7 +58,7 @@ export const JAVASCRIPT_SEMANTIC_RELATION_FAMILIES = [ "timer", ] as const; -/** Directed semantic relations admitted by graph v1. */ +/** Directed semantic relations admitted by the graph. */ export const JAVASCRIPT_SEMANTIC_RELATIONS = [ "acquires", "aggregates", @@ -357,7 +357,6 @@ const graphCoverageSchema = z.strictObject({ /** Graph content before its top-level commitment is derived. */ export const javaScriptSemanticGraphInputSchema = z.strictObject({ schema: z.literal("JavaScriptSemanticRelationGraph"), - schema_version: z.literal(1), root_artifact_sha256: digestSchema, application_graph_id: z.string().regex(/^jag_[a-f0-9]{64}$/u), root_node_ids: z.array(semanticNodeIdSchema).min(1).max(10_000), @@ -369,7 +368,7 @@ export const javaScriptSemanticGraphInputSchema = z.strictObject({ limitations: z.array(boundedTextSchema).max(1_000), }); -/** Stored JavaScript Semantic Relation Graph v1. */ +/** Stored JavaScript Semantic Relation Graph. */ export const javaScriptSemanticGraphRecordSchema = javaScriptSemanticGraphInputSchema.extend({ graph_id: z.string().regex(/^jsrg_[a-f0-9]{64}$/u), diff --git a/src/domain/javascriptSemanticGraphSerialization.ts b/src/domain/javascriptSemanticGraphSerialization.ts index ec12fe6f10..7a3a8b2eff 100644 --- a/src/domain/javascriptSemanticGraphSerialization.ts +++ b/src/domain/javascriptSemanticGraphSerialization.ts @@ -1,6 +1,4 @@ import canonicalize from "canonicalize"; -import { z } from "zod"; - import { javaScriptSemanticGraphSchema, type JavaScriptSemanticGraph, @@ -15,24 +13,10 @@ const canonicalJson = (value: unknown): string => { return encoded; }; -/** Parse a stored semantic graph and reject unsupported versions or stale IDs. */ +/** Parse a stored semantic graph and reject stale IDs. */ export const parseJavaScriptSemanticGraph = ( input: unknown, -): JavaScriptSemanticGraph => { - const envelope = z - .object({ schema: z.string(), schema_version: z.number() }) - .passthrough() - .safeParse(input); - if ( - envelope.success && - envelope.data.schema === "JavaScriptSemanticRelationGraph" && - envelope.data.schema_version !== 1 - ) - throw new TypeError( - `Unsupported JavaScript Semantic Relation Graph schema version: ${String(envelope.data.schema_version)}`, - ); - return javaScriptSemanticGraphSchema.parse(input); -}; +): JavaScriptSemanticGraph => javaScriptSemanticGraphSchema.parse(input); /** Serialize a verified semantic graph as canonical JSON. */ export const serializeJavaScriptSemanticGraph = (input: unknown): string => diff --git a/src/domain/javascriptSemanticGraphTraversal.test.ts b/src/domain/javascriptSemanticGraphTraversal.test.ts index cce271cfe1..602735b57b 100644 --- a/src/domain/javascriptSemanticGraphTraversal.test.ts +++ b/src/domain/javascriptSemanticGraphTraversal.test.ts @@ -193,7 +193,6 @@ const fixtureGraph = (withUnknown = false): JavaScriptSemanticGraph => { }); return createJavaScriptSemanticGraph({ schema: "JavaScriptSemanticRelationGraph", - schema_version: 1, root_artifact_sha256: SHA, application_graph_id: JAG_ID, root_node_ids: [module.node_id], diff --git a/src/domain/javascriptSemanticQuery.ts b/src/domain/javascriptSemanticQuery.ts index 42d2b84002..4841225a69 100644 --- a/src/domain/javascriptSemanticQuery.ts +++ b/src/domain/javascriptSemanticQuery.ts @@ -118,7 +118,6 @@ export const queryJavaScriptSemanticGraph = ( unknownsTruncated: allRelevantUnknowns.length > relevantUnknowns.length, }); return javaScriptSemanticQueryResultSchema.parse({ - schema_version: 1, query_id: queryId, source_graph_id: graph.graph_id, seed: input.seed, diff --git a/src/domain/javascriptSemanticQuerySchemas.ts b/src/domain/javascriptSemanticQuerySchemas.ts index 0b180cf903..e7f3f90dee 100644 --- a/src/domain/javascriptSemanticQuerySchemas.ts +++ b/src/domain/javascriptSemanticQuerySchemas.ts @@ -128,7 +128,6 @@ const queryFrontierSchema = z.strictObject({ /** Deterministic, pageable semantic trace result. */ export const javaScriptSemanticQueryResultSchema = z.strictObject({ - schema_version: z.literal(1), query_id: z.string().regex(/^jsrq_[a-f0-9]{64}$/u), source_graph_id: z.string().regex(/^jsrg_[a-f0-9]{64}$/u), seed: javaScriptSemanticQuerySeedSchema, diff --git a/src/domain/managedApplicationGraph.ts b/src/domain/managedApplicationGraph.ts index c3daed94e0..10a5c0c943 100644 --- a/src/domain/managedApplicationGraph.ts +++ b/src/domain/managedApplicationGraph.ts @@ -23,7 +23,6 @@ import { assessManagedGraphOmissions, managedGraphEvidenceCoverage, managedGraphResultCoverage, - totalManagedGraphOmitted, } from "./managedApplicationGraphCoverage.js"; import { addArtifactNode, @@ -36,32 +35,12 @@ const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u); const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const boundedTextSchema = z.string().min(1).max(4_096); -const managedApplicationGraphLimitsSchema = z.strictObject({ - max_types: z.number().int().min(0).max(100_000).default(5_000), - max_methods: z.number().int().min(0).max(100_000).default(10_000), - max_fields: z.number().int().min(0).max(100_000).default(5_000), - max_pinvoke_imports: z.number().int().min(0).max(100_000).default(5_000), - max_native_implementations: z - .number() - .int() - .min(0) - .max(100_000) - .default(5_000), -}); - /** Authenticated managed Evidence records projected into the application graph. */ export const projectManagedApplicationGraphInputSchema = z .strictObject({ managed_artifact: evidenceSchema.optional(), managed_members: evidenceSchema.optional(), managed_native_boundaries: evidenceSchema.optional(), - limits: managedApplicationGraphLimitsSchema.default({ - max_types: 5_000, - max_methods: 10_000, - max_fields: 5_000, - max_pinvoke_imports: 5_000, - max_native_implementations: 5_000, - }), }) .superRefine((input, context) => { if ( @@ -78,7 +57,6 @@ export const projectManagedApplicationGraphInputSchema = z /** Managed-code projection result containing a validated application graph. */ export const managedApplicationGraphResultSchema = z.strictObject({ - schema_version: z.literal(1), projection_id: z.string().regex(/^magp_[a-f0-9]{64}$/u), root_artifact_sha256: digestSchema, source_evidence: z.strictObject({ @@ -99,12 +77,7 @@ export const managedApplicationGraphResultSchema = z.strictObject({ }), graph: javascriptApplicationGraphSchema, coverage: z.strictObject({ - status: z.enum(["complete-within-inputs", "partial", "truncated"]), - omitted_types: z.number().int().min(0), - omitted_methods: z.number().int().min(0), - omitted_fields: z.number().int().min(0), - omitted_pinvoke_imports: z.number().int().min(0), - omitted_native_implementations: z.number().int().min(0), + status: z.enum(["complete-within-inputs", "partial"]), }), evidence_links: z.array(evidenceIdSchema).min(1).max(3), limitations: z.array(boundedTextSchema).max(1_000), @@ -174,23 +147,12 @@ export const projectManagedApplicationGraph = ( }; const artifactNode = addArtifactNode(state); addArtifactIdentityNodes(state, artifactNode, parsed); - const memberCounts = addMemberNodes( - state, - artifactNode, - parsed, - input.limits, - ); - const boundaryCounts = addBoundaryNodes( - state, - artifactNode, - parsed, - input.limits, - ); - const omissions = omittedCounts(parsed, input.limits); + const memberCounts = addMemberNodes(state, artifactNode, parsed); + const boundaryCounts = addBoundaryNodes(state, artifactNode, parsed); + const omissions = omittedCounts(parsed); const limitations = projectionLimitations(parsed, omissions); const graph = createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [artifactNode.node_id], nodes: state.nodes, edges: state.edges, @@ -198,7 +160,6 @@ export const projectManagedApplicationGraph = ( limitations, }); const withoutId = { - schema_version: 1 as const, root_artifact_sha256: state.artifactSha256, source_evidence: { managed_artifact_evidence_id: @@ -293,18 +254,12 @@ const assertSameArtifact = ( ); }; -const omittedCounts = ( - parsed: ParsedManagedGraphInput, - limits: ProjectManagedApplicationGraphInput["limits"], -) => - assessManagedGraphOmissions( - { - artifact: parsed.artifact?.result ?? null, - members: parsed.members?.result ?? null, - boundaries: parsed.boundaries?.result ?? null, - }, - limits, - ); +const omittedCounts = (parsed: ParsedManagedGraphInput) => + assessManagedGraphOmissions({ + artifact: parsed.artifact?.result ?? null, + members: parsed.members?.result ?? null, + boundaries: parsed.boundaries?.result ?? null, + }); const projectionLimitations = ( parsed: ParsedManagedGraphInput, @@ -324,9 +279,4 @@ const projectionLimitations = ( ...(omissions.partialInput ? ["At least one supplied managed Evidence record has partial coverage."] : []), - ...(totalManagedGraphOmitted(omissions) > 0 - ? [ - "Projection output omits managed entities because of source pagination or managed application graph limits.", - ] - : []), ]; diff --git a/src/domain/managedApplicationGraphCoverage.ts b/src/domain/managedApplicationGraphCoverage.ts index d4a2d3f94e..683226a30a 100644 --- a/src/domain/managedApplicationGraphCoverage.ts +++ b/src/domain/managedApplicationGraphCoverage.ts @@ -4,23 +4,9 @@ import type { ManagedMemberInspection, ManagedNativeBoundaryInspection, } from "./managedArtifact.js"; -import { - assessKnownPageCoverage, - type KnownCollectionPage, - type KnownPageCoverageAssessment, -} from "./knownPageCoverage.js"; type ManagedCoverageState = "complete" | "partial" | "unavailable"; -/** Projection limits that can omit known managed graph entities. */ -export interface ManagedGraphProjectionLimits { - readonly max_types: number; - readonly max_methods: number; - readonly max_fields: number; - readonly max_pinvoke_imports: number; - readonly max_native_implementations: number; -} - /** Source observations used to derive managed graph coverage. */ export interface ManagedGraphCoverageSources { readonly artifact: ManagedArtifactInspection | null; @@ -28,34 +14,24 @@ export interface ManagedGraphCoverageSources { readonly boundaries: ManagedNativeBoundaryInspection | null; } -/** Exact known-page omissions plus any unknown source-coverage floor. */ +/** Whether any supplied source has incomplete coverage. */ export interface ManagedGraphProjectionOmissions { - readonly limits: ManagedGraphProjectionLimits; - readonly unknownInputCoverage: boolean; readonly partialInput: boolean; - readonly types: number; - readonly methods: number; - readonly fields: number; - readonly pinvokeImports: number; - readonly nativeImplementations: number; - readonly sourceLimits: ApplicationGraphEvidence["coverage"]["limits"]; } -/** Complete application-graph fact coverage. */ -const completeManagedGraphCoverage = - (): ApplicationGraphEvidence["coverage"] => ({ - status: "complete", - truncated: false, - omitted_count: 0, - limits: [], - }); +const completeCoverage = (): ApplicationGraphEvidence["coverage"] => ({ + status: "complete", + truncated: false, + omitted_count: 0, + limits: [], +}); -/** Translate one managed parser coverage state without inventing omissions. */ +/** Preserve the source parser's coverage state on projected observations. */ export const managedSourceCoverage = ( state: ManagedCoverageState, ): ApplicationGraphEvidence["coverage"] => state === "complete" - ? completeManagedGraphCoverage() + ? completeCoverage() : { status: state, truncated: false, @@ -63,235 +39,35 @@ export const managedSourceCoverage = ( limits: [], }; -/** Preserve one known source page's coverage on a projected graph fact. */ -export const managedSourcePageCoverage = ( - state: ManagedCoverageState, - page: KnownCollectionPage, - scope: string, -): ApplicationGraphEvidence["coverage"] => { - if (state !== "complete") return managedSourceCoverage(state); - const assessment = assessKnownPageCoverage(page); - if (assessment.complete) return completeManagedGraphCoverage(); - return { - status: "partial", - truncated: assessment.omittedCount > 0, - omitted_count: assessment.omittedCount, - limits: - assessment.omittedCount > 0 - ? [ - { name: `${scope}_offset`, value: page.offset, unit: "items" }, - { name: `${scope}_limit`, value: page.limit, unit: "items" }, - ] - : [], - }; -}; - -/** Assess exact source-page and local-limit omissions for graph projection. */ +/** Determine whether any supplied managed inspection was partial. */ export const assessManagedGraphOmissions = ( sources: ManagedGraphCoverageSources, - limits: ManagedGraphProjectionLimits, -): ManagedGraphProjectionOmissions => { - const { typeAssessment, methodAssessment, fieldAssessment } = - assessMemberPages(sources.members, limits); - const { pinvokeAssessment, implementationAssessment } = assessBoundaryPages( - sources.boundaries, - limits, - ); - const pageAssessments = [ - typeAssessment, - methodAssessment, - fieldAssessment, - pinvokeAssessment, - implementationAssessment, - ]; - const unknownInputCoverage = hasUnknownInputCoverage(sources); - return { - limits, - unknownInputCoverage, - partialInput: - pageAssessments.some(({ sourceComplete }) => !sourceComplete) || - unknownInputCoverage, - types: typeAssessment.omittedCount, - methods: methodAssessment.omittedCount, - fields: fieldAssessment.omittedCount, - pinvokeImports: pinvokeAssessment.omittedCount, - nativeImplementations: implementationAssessment.omittedCount, - sourceLimits: [ - ...memberSourceLimits(sources.members), - ...boundarySourceLimits(sources.boundaries), - ], - }; -}; +): ManagedGraphProjectionOmissions => ({ + partialInput: [ + sources.members?.coverage.state, + sources.boundaries?.coverage.state, + sources.artifact?.coverage.state, + ].some((state) => state !== undefined && state !== "complete"), +}); -/** Project aggregate omissions into the application graph coverage contract. */ +/** Derive graph coverage solely from the coverage of supplied source evidence. */ export const managedGraphEvidenceCoverage = ( omissions: ManagedGraphProjectionOmissions, -): ApplicationGraphEvidence["coverage"] => { - const omitted = totalManagedGraphOmitted(omissions); - if (omissions.unknownInputCoverage) - return { - status: "partial", - truncated: false, - omitted_count: null, - limits: [], - }; - if (omitted > 0) - return { - status: "partial", - truncated: true, - omitted_count: omitted, - limits: projectionLimits(omissions), - }; - return omissions.partialInput +): ApplicationGraphEvidence["coverage"] => + omissions.partialInput ? { status: "partial", truncated: false, omitted_count: null, limits: [], } - : completeManagedGraphCoverage(); -}; + : completeCoverage(); -/** Project aggregate omissions into the managed workflow result contract. */ +/** Report whether all supplied source evidence was complete. */ export const managedGraphResultCoverage = ( omissions: ManagedGraphProjectionOmissions, -) => { - const omitted = totalManagedGraphOmitted(omissions); - return { - status: omissions.unknownInputCoverage - ? ("partial" as const) - : omitted > 0 - ? ("truncated" as const) - : omissions.partialInput - ? ("partial" as const) - : ("complete-within-inputs" as const), - omitted_types: omissions.types, - omitted_methods: omissions.methods, - omitted_fields: omissions.fields, - omitted_pinvoke_imports: omissions.pinvokeImports, - omitted_native_implementations: omissions.nativeImplementations, - }; -}; - -/** Sum all exact entity omissions represented by the managed graph result. */ -export const totalManagedGraphOmitted = ( - omissions: ManagedGraphProjectionOmissions, -): number => - omissions.types + - omissions.methods + - omissions.fields + - omissions.pinvokeImports + - omissions.nativeImplementations; - -const COMPLETE_EMPTY_PAGE: KnownPageCoverageAssessment = { - complete: true, - sourceComplete: true, - includedCount: 0, - omittedCount: 0, - sourceOmittedCount: 0, -}; - -const assessMemberPages = ( - members: ManagedMemberInspection | null, - limits: ManagedGraphProjectionLimits, -) => - members === null - ? { - typeAssessment: COMPLETE_EMPTY_PAGE, - methodAssessment: COMPLETE_EMPTY_PAGE, - fieldAssessment: COMPLETE_EMPTY_PAGE, - } - : { - typeAssessment: assessKnownPageCoverage( - members.types, - limits.max_types, - ), - methodAssessment: assessKnownPageCoverage( - members.methods, - limits.max_methods, - ), - fieldAssessment: assessKnownPageCoverage( - members.fields, - limits.max_fields, - ), - }; - -const assessBoundaryPages = ( - boundaries: ManagedNativeBoundaryInspection | null, - limits: ManagedGraphProjectionLimits, -) => - boundaries === null - ? { - pinvokeAssessment: COMPLETE_EMPTY_PAGE, - implementationAssessment: COMPLETE_EMPTY_PAGE, - } - : { - pinvokeAssessment: assessKnownPageCoverage( - boundaries.pinvoke_imports, - limits.max_pinvoke_imports, - ), - implementationAssessment: assessKnownPageCoverage( - boundaries.native_implementations, - limits.max_native_implementations, - ), - }; - -const hasUnknownInputCoverage = ( - sources: ManagedGraphCoverageSources, -): boolean => - [ - sources.members?.coverage.state, - sources.boundaries?.coverage.state, - sources.artifact?.coverage.state, - ].some((state) => state !== undefined && state !== "complete"); - -const pageLimits = ( - name: string, - page: { readonly offset: number; readonly limit: number }, -): ApplicationGraphEvidence["coverage"]["limits"] => [ - { name: `${name}_offset`, value: page.offset, unit: "items" }, - { name: `${name}_limit`, value: page.limit, unit: "items" }, -]; - -const memberSourceLimits = ( - members: ManagedMemberInspection | null, -): ApplicationGraphEvidence["coverage"]["limits"] => - members === null - ? [] - : [ - ...pageLimits("source_types", members.types), - ...pageLimits("source_methods", members.methods), - ...pageLimits("source_fields", members.fields), - ]; - -const boundarySourceLimits = ( - boundaries: ManagedNativeBoundaryInspection | null, -): ApplicationGraphEvidence["coverage"]["limits"] => - boundaries === null - ? [] - : [ - ...pageLimits("source_pinvoke_imports", boundaries.pinvoke_imports), - ...pageLimits( - "source_native_implementations", - boundaries.native_implementations, - ), - ]; - -const projectionLimits = ( - omissions: ManagedGraphProjectionOmissions, -): ApplicationGraphEvidence["coverage"]["limits"] => [ - { name: "max_types", value: omissions.limits.max_types, unit: "items" }, - { name: "max_methods", value: omissions.limits.max_methods, unit: "items" }, - { name: "max_fields", value: omissions.limits.max_fields, unit: "items" }, - { - name: "max_pinvoke_imports", - value: omissions.limits.max_pinvoke_imports, - unit: "items", - }, - { - name: "max_native_implementations", - value: omissions.limits.max_native_implementations, - unit: "items", - }, - ...omissions.sourceLimits, -]; +) => ({ + status: omissions.partialInput + ? ("partial" as const) + : ("complete-within-inputs" as const), +}); diff --git a/src/domain/managedApplicationGraphNodes.ts b/src/domain/managedApplicationGraphNodes.ts index 4198c677eb..99ee067e24 100644 --- a/src/domain/managedApplicationGraphNodes.ts +++ b/src/domain/managedApplicationGraphNodes.ts @@ -5,11 +5,7 @@ import { type ApplicationGraphEvidence, type ApplicationNode, } from "./javascriptApplicationGraph.js"; -import { - managedSourceCoverage, - managedSourcePageCoverage, - type ManagedGraphProjectionLimits, -} from "./managedApplicationGraphCoverage.js"; +import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js"; import { type ManagedMemberInspection, type ManagedNativeBoundaryInspection, @@ -19,13 +15,12 @@ import type { ParsedManagedGraphInput, } from "./managedApplicationGraph.js"; import { moduleCoverageState } from "./managedApplicationGraphNodeCoverage.js"; -type ManagedMethod = ManagedMemberInspection["methods"]["items"][number]; -type ManagedField = ManagedMemberInspection["fields"]["items"][number]; -type ManagedType = ManagedMemberInspection["types"]["items"][number]; -type PinvokeImport = - ManagedNativeBoundaryInspection["pinvoke_imports"]["items"][number]; +type ManagedMethod = ManagedMemberInspection["methods"][number]; +type ManagedField = ManagedMemberInspection["fields"][number]; +type ManagedType = ManagedMemberInspection["types"][number]; +type PinvokeImport = ManagedNativeBoundaryInspection["pinvoke_imports"][number]; type NativeImplementation = - ManagedNativeBoundaryInspection["native_implementations"]["items"][number]; + ManagedNativeBoundaryInspection["native_implementations"][number]; /** Options for a managed contains relationship edge. */ export interface ContainsEdgeOptions { @@ -141,28 +136,13 @@ export const addMemberNodes = ( state: GraphBuildState, artifactNode: ApplicationNode, parsed: ParsedManagedGraphInput, - limits: ManagedGraphProjectionLimits, ) => { const members = parsed.members?.result; if (members === undefined) return { types: 0, methods: 0, fields: 0 }; - const types = members.types.items.slice(0, limits.max_types); - const methods = members.methods.items.slice(0, limits.max_methods); - const fields = members.fields.items.slice(0, limits.max_fields); - const typeCoverage = managedSourcePageCoverage( - members.coverage.state, - members.types, - "types", - ); - const methodCoverage = managedSourcePageCoverage( - members.coverage.state, - members.methods, - "methods", - ); - const fieldCoverage = managedSourcePageCoverage( - members.coverage.state, - members.fields, - "fields", - ); + const { types, methods, fields } = members; + const typeCoverage = managedSourceCoverage(members.coverage.state); + const methodCoverage = managedSourceCoverage(members.coverage.state); + const fieldCoverage = managedSourceCoverage(members.coverage.state); for (const type of types) { const node = typeNode(state, type, typeCoverage); state.nodes.push(node); @@ -308,28 +288,15 @@ export const addBoundaryNodes = ( state: GraphBuildState, artifactNode: ApplicationNode, parsed: ParsedManagedGraphInput, - limits: ManagedGraphProjectionLimits, ) => { const boundaries = parsed.boundaries?.result; if (boundaries === undefined) return { pinvoke_imports: 0, native_implementations: 0 }; - const pinvokes = boundaries.pinvoke_imports.items.slice( - 0, - limits.max_pinvoke_imports, - ); - const implementations = boundaries.native_implementations.items.slice( - 0, - limits.max_native_implementations, - ); - const pinvokeCoverage = managedSourcePageCoverage( + const { pinvoke_imports: pinvokes, native_implementations: implementations } = + boundaries; + const pinvokeCoverage = managedSourceCoverage(boundaries.coverage.state); + const implementationCoverage = managedSourceCoverage( boundaries.coverage.state, - boundaries.pinvoke_imports, - "pinvoke_imports", - ); - const implementationCoverage = managedSourcePageCoverage( - boundaries.coverage.state, - boundaries.native_implementations, - "native_implementations", ); for (const pinvoke of pinvokes) { const node = pinvokeNode(state, pinvoke, pinvokeCoverage); diff --git a/src/domain/managedArtifact.ts b/src/domain/managedArtifact.ts index d7540173ac..2342ecce51 100644 --- a/src/domain/managedArtifact.ts +++ b/src/domain/managedArtifact.ts @@ -9,17 +9,6 @@ export const cliMetadataGuidSchema = z .string() .regex(/^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$/u); -const managedPage = (item: Item) => - z.object({ - items: z.array(item), - offset: offsetSchema, - limit: z.number().int().min(1), - total: z.number().int().min(0), - returned: z.number().int().min(0), - dropped: z.number().int().min(0), - complete: z.boolean(), - }); - const publicKeyIdentitySchema = z.object({ kind: z.enum(["none", "public-key", "public-key-token"]), byte_length: z.number().int().min(0), @@ -314,7 +303,6 @@ const managedParseIssueSchema = z.object({ /** Provider-neutral, execution-free PE/CLI triage and identity result. */ export const managedArtifactInspectionSchema = z.object({ - schema_version: z.literal(1), artifact: z.object({ path: z.string().min(1), sha256: digestSchema, @@ -398,9 +386,9 @@ export const managedArtifactInspectionSchema = z.object({ module: moduleIdentitySchema.nullable(), assembly: assemblyIdentitySchema.nullable(), target_frameworks: z.array(z.string()), - references: managedPage(assemblyReferenceSchema), - resources: managedPage(managedResourceSchema), - attributes: managedPage(customAttributeSchema), + references: z.array(assemblyReferenceSchema), + resources: z.array(managedResourceSchema), + attributes: z.array(customAttributeSchema), coverage: z.object({ state: z.enum(["complete", "partial", "unavailable"]), issues: z.array(managedParseIssueSchema), @@ -410,7 +398,6 @@ export const managedArtifactInspectionSchema = z.object({ /** Provider-neutral, execution-free metadata/signature/IL member inspection. */ export const managedMemberInspectionSchema = z.object({ - schema_version: z.literal(1), artifact: z.object({ path: z.string().min(1), sha256: digestSchema, @@ -431,12 +418,12 @@ export const managedMemberInspectionSchema = z.object({ requires_artifact_sha256: digestSchema, requires_mvid: cliMetadataGuidSchema.nullable(), }), - types: managedPage(managedTypeSchema), - fields: managedPage(managedFieldSchema), - methods: managedPage(managedMethodSchema), - member_refs: managedPage(managedMemberReferenceSchema), - call_edges: managedPage(managedCallEdgeSchema), - field_accesses: managedPage(managedFieldAccessSchema), + types: z.array(managedTypeSchema), + fields: z.array(managedFieldSchema), + methods: z.array(managedMethodSchema), + member_refs: z.array(managedMemberReferenceSchema), + call_edges: z.array(managedCallEdgeSchema), + field_accesses: z.array(managedFieldAccessSchema), coverage: z.object({ state: z.enum(["complete", "partial", "unavailable"]), issues: z.array(managedParseIssueSchema), @@ -446,7 +433,6 @@ export const managedMemberInspectionSchema = z.object({ /** Provider-neutral managed/native boundary observations from PE/CLI metadata. */ export const managedNativeBoundaryInspectionSchema = z.object({ - schema_version: z.literal(1), artifact: z.object({ path: z.string().min(1), sha256: digestSchema, @@ -476,9 +462,9 @@ export const managedNativeBoundaryInspectionSchema = z.object({ managed_native_header_rva: z.number().int().min(0).max(0xffff_ffff), managed_native_header_size: z.number().int().min(0).max(0xffff_ffff), }), - module_refs: managedPage(managedModuleReferenceSchema), - pinvoke_imports: managedPage(managedNativeImportSchema), - native_implementations: managedPage(managedNativeImplementationSchema), + module_refs: z.array(managedModuleReferenceSchema), + pinvoke_imports: z.array(managedNativeImportSchema), + native_implementations: z.array(managedNativeImplementationSchema), summary: z.object({ module_ref_count: z.number().int().min(0), pinvoke_import_count: z.number().int().min(0), diff --git a/src/domain/managedMemberComparison.test.ts b/src/domain/managedMemberComparison.test.ts index 3c548db1b7..f6ce582ecb 100644 --- a/src/domain/managedMemberComparison.test.ts +++ b/src/domain/managedMemberComparison.test.ts @@ -13,12 +13,6 @@ import { MANAGED_MEMBER_FIXTURE_LIMITS, } from "../dotnet/ManagedPe.fixture.js"; -const comparisonLimits = { - max_method_matches: 100, - max_field_matches: 100, - max_candidates: 10, -}; - describe("managed member comparison", () => { it("remaps renamed methods by exact CIL/signature without using names", () => { const leftBytes = buildManagedPeFixture(); @@ -34,7 +28,6 @@ describe("managed member comparison", () => { const result = compareManagedMembers( { evidenceId: left.evidenceId, result: left.result }, { evidenceId: right.evidenceId, result: right.result }, - comparisonLimits, ); expect(result.algorithm.name_matching).toBe("not-used"); @@ -72,7 +65,6 @@ describe("managed member comparison", () => { const result = compareManagedMembers( { evidenceId: left.evidenceId, result: left.result }, { evidenceId: right.evidenceId, result: right.result }, - comparisonLimits, ); expect(result.matching.exact_il_signature).toBe(0); @@ -90,7 +82,6 @@ describe("managed member comparison", () => { const result = compareManagedMembers( { evidenceId: left.evidenceId, result: left.result }, { evidenceId: right.evidenceId, result: right.result }, - comparisonLimits, ); const method = result.methods[0]; expect(method).toBeDefined(); @@ -137,7 +128,6 @@ describe("managed member comparison", () => { const result = compareManagedMembers( { evidenceId: left.evidenceId, result: left.result }, { evidenceId: right.evidenceId, result: right.result }, - comparisonLimits, ); expect(result.matching.exact_il_signature).toBe(0); @@ -151,33 +141,22 @@ describe("managed member comparison", () => { }); describe("managed member comparison uncertainty", () => { - it("keeps unmatched members unknown when the opposite page is incomplete", () => { - const left = inspect(buildManagedPeFixture(), "/tmp/left-paged.dll"); - const right = inspect(buildManagedPeFixture(), "/tmp/right-paged.dll"); + it("keeps unmatched members unknown when opposite metadata is incomplete", () => { + const left = inspect(buildManagedPeFixture(), "/tmp/left-partial.dll"); + const right = inspect(buildManagedPeFixture(), "/tmp/right-partial.dll"); const leftPartial = { ...left.result, - fields: { - ...left.result.fields, - items: [], - returned: 0, - dropped: 1, - complete: false, - }, + fields: [], + coverage: { ...left.result.coverage, state: "partial" as const }, }; const rightPartial = { ...right.result, - methods: { - ...right.result.methods, - items: [], - returned: 0, - dropped: 1, - complete: false, - }, + methods: [], + coverage: { ...right.result.coverage, state: "partial" as const }, }; const result = compareManagedMembers( { evidenceId: left.evidenceId, result: leftPartial }, { evidenceId: right.evidenceId, result: rightPartial }, - comparisonLimits, ); expect(result.summary).toMatchObject({ @@ -189,69 +168,59 @@ describe("managed member comparison uncertainty", () => { status: "unknown", left: { token: "0x06000001" }, right: null, - limitations: [expect.stringContaining("unknown-within-unobserved-page")], + limitations: [ + expect.stringContaining("unknown-within-incomplete-metadata"), + ], }); expect(result.fields[0]).toMatchObject({ status: "unknown", left: null, right: { token: "0x04000001" }, - limitations: [expect.stringContaining("unknown-within-unobserved-page")], + limitations: [ + expect.stringContaining("unknown-within-incomplete-metadata"), + ], }); expect(result.coverage).toEqual({ - status: "truncated", + status: "partial", left_status: "partial", right_status: "partial", - omitted_methods: 1, - omitted_fields: 1, - omitted_candidates: 0, }); }); it("does not guess ambiguous field signature matches", () => { const left = inspect(buildManagedPeFixture(), "/tmp/left.dll"); - const leftField = left.result.fields.items[0]; + const leftField = left.result.fields[0]; expect(leftField).toBeDefined(); if (leftField === undefined) return; const duplicatedLeft = { ...left.result, - fields: { - ...left.result.fields, - items: [ - leftField, - { - ...leftField, - token: "0x04000002", - name: "other", - }, - ], - total: 2, - returned: 2, - }, + fields: [ + leftField, + { + ...leftField, + token: "0x04000002", + name: "other", + }, + ], }; const right = inspect(buildManagedPeFixture(), "/tmp/right.dll"); - const rightField = right.result.fields.items[0]; + const rightField = right.result.fields[0]; expect(rightField).toBeDefined(); if (rightField === undefined) return; const duplicatedRight = { ...right.result, - fields: { - ...right.result.fields, - items: [ - rightField, - { - ...rightField, - token: "0x04000002", - name: "renamed", - }, - ], - total: 2, - returned: 2, - }, + fields: [ + rightField, + { + ...rightField, + token: "0x04000002", + name: "renamed", + }, + ], }; const result = compareManagedMembers( { evidenceId: left.evidenceId, result: duplicatedLeft }, { evidenceId: right.evidenceId, result: duplicatedRight }, - comparisonLimits, ); expect(result.matching.ambiguous).toBe(1); diff --git a/src/domain/managedMemberComparison.ts b/src/domain/managedMemberComparison.ts index c564c76418..ebba3e181e 100644 --- a/src/domain/managedMemberComparison.ts +++ b/src/domain/managedMemberComparison.ts @@ -5,7 +5,6 @@ import { cliMetadataGuidSchema, type ManagedMemberInspection, } from "./managedArtifact.js"; -import { assessKnownPageCoverage } from "./knownPageCoverage.js"; import { buildComparisonCoverage, buildComparisonMatching, @@ -24,22 +23,11 @@ const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const tokenSchema = z.string().regex(/^0x[0-9a-f]{8}$/u); const boundedTextSchema = z.string().min(1).max(4_096); -const comparisonLimitsSchema = z.strictObject({ - max_method_matches: z.number().int().min(1).max(50_000).default(10_000), - max_field_matches: z.number().int().min(0).max(50_000).default(5_000), - max_candidates: z.number().int().min(1).max(500).default(50), -}); - -/** Two authenticated managed member observations and deterministic bounds. */ +/** Two authenticated managed member observations. */ export const compareManagedMembersInputSchema = z .strictObject({ left: evidenceSchema, right: evidenceSchema, - limits: comparisonLimitsSchema.default({ - max_method_matches: 10_000, - max_field_matches: 5_000, - max_candidates: 50, - }), unknown_registry_approved: z.literal(true).optional(), }) .superRefine((input, context) => { @@ -56,7 +44,7 @@ const concreteMatchBasisSchema = z.enum([ "structural-method-shape", "field-signature", ]); -const candidateTokensSchema = z.array(tokenSchema).min(1).max(500); +const candidateTokensSchema = z.array(tokenSchema).min(1); const matchedComparisonSchema = z.strictObject({ status: z.literal("matched"), basis: concreteMatchBasisSchema, @@ -160,7 +148,6 @@ const fieldComparisonItemSchema = comparisonItemSchema( /** Obfuscation-resistant, execution-free managed member comparison. */ export const managedMemberComparisonResultSchema = z.strictObject({ - schema_version: z.literal(1), comparison_id: z.string().regex(/^mmc_[a-f0-9]{64}$/u), algorithm: z.strictObject({ name: z.literal("rea-managed-member-comparison"), @@ -200,18 +187,15 @@ export const managedMemberComparisonResultSchema = z.strictObject({ ambiguous: z.number().int().min(0), unmatched: z.number().int().min(0), }), - methods: z.array(methodComparisonItemSchema).max(50_000), - fields: z.array(fieldComparisonItemSchema).max(50_000), + methods: z.array(methodComparisonItemSchema), + fields: z.array(fieldComparisonItemSchema), coverage: z.strictObject({ - status: z.enum(["complete-within-inputs", "partial", "truncated"]), + status: z.enum(["complete-within-inputs", "partial"]), left_status: z.enum(["complete", "partial", "unavailable"]), right_status: z.enum(["complete", "partial", "unavailable"]), - omitted_methods: z.number().int().min(0), - omitted_fields: z.number().int().min(0), - omitted_candidates: z.number().int().min(0), }), evidence_links: z.array(evidenceIdSchema).length(2), - limitations: z.array(boundedTextSchema).max(1_000), + limitations: z.array(boundedTextSchema), }); export type CompareManagedMembersInput = z.infer< @@ -231,56 +215,36 @@ export interface ManagedMemberComparisonSide { export const compareManagedMembers = ( left: ManagedMemberComparisonSide, right: ManagedMemberComparisonSide, - limits: CompareManagedMembersInput["limits"], ): ManagedMemberComparisonResult => { - const leftMethodPage = assessKnownPageCoverage(left.result.methods); - const rightMethodPage = assessKnownPageCoverage(right.result.methods); - const leftFieldPage = assessKnownPageCoverage(left.result.fields); - const rightFieldPage = assessKnownPageCoverage(right.result.fields); - const { methodMatches, fieldMatches } = keyMembers( - left, - right, - limits.max_candidates, - ); + const leftCoverage = { + sourceComplete: left.result.coverage.state === "complete", + }; + const rightCoverage = { + sourceComplete: right.result.coverage.state === "complete", + }; + const { methodMatches, fieldMatches } = keyMembers(left, right); const itemContext = { leftEvidenceId: left.evidenceId, rightEvidenceId: right.evidenceId, - leftComplete: leftMethodPage.sourceComplete && leftFieldPage.sourceComplete, - rightComplete: - rightMethodPage.sourceComplete && rightFieldPage.sourceComplete, - limits, + leftComplete: leftCoverage.sourceComplete, + rightComplete: rightCoverage.sourceComplete, }; const methodItems = buildMethodItems(methodMatches, itemContext); const fieldItems = buildFieldItems(fieldMatches, itemContext); - const allItems = [...methodItems.items, ...fieldItems.items]; + const allItems = [...methodItems, ...fieldItems]; const summary = buildComparisonSummary(allItems); - const matching = buildComparisonMatching(methodItems.items, fieldItems.items); + const matching = buildComparisonMatching(methodItems, fieldItems); const coverage = buildComparisonCoverage({ left: left.result, right: right.result, - leftMethodPage, - rightMethodPage, - leftFieldPage, - rightFieldPage, - omittedMethodItems: methodItems.omitted, - omittedFieldItems: fieldItems.omitted, - omittedCandidates: - methodMatches.omittedCandidates + fieldMatches.omittedCandidates, }); - const limitations = comparisonLimitations( - left.result, - right.result, - coverage.omitted_methods + coverage.omitted_fields, - coverage.omitted_candidates, - ); + const limitations = comparisonLimitations(left.result, right.result); const result = { - schema_version: 1 as const, comparison_id: `mmc_${sha256({ left: left.evidenceId, right: right.evidenceId, - methods: [...methodItems.items], - fields: [...fieldItems.items], - limits, + methods: [...methodItems], + fields: [...fieldItems], })}`, algorithm: { name: "rea-managed-member-comparison" as const, @@ -292,8 +256,8 @@ export const compareManagedMembers = ( right: sideManifest(right), summary, matching, - methods: methodItems.items, - fields: fieldItems.items, + methods: methodItems, + fields: fieldItems, coverage, evidence_links: [left.evidenceId, right.evidenceId], limitations, diff --git a/src/domain/managedMemberComparisonCoverage.ts b/src/domain/managedMemberComparisonCoverage.ts index 4d5f806588..9988fc597e 100644 --- a/src/domain/managedMemberComparisonCoverage.ts +++ b/src/domain/managedMemberComparisonCoverage.ts @@ -4,76 +4,35 @@ import type { } from "./managedMemberComparison.js"; import type { ManagedMemberInspection } from "./managedArtifact.js"; -interface PageAssessment { - readonly sourceComplete: boolean; - readonly sourceOmittedCount: number; -} - interface ComparisonCoverageInput { readonly left: ManagedMemberInspection; readonly right: ManagedMemberInspection; - readonly leftMethodPage: PageAssessment; - readonly rightMethodPage: PageAssessment; - readonly leftFieldPage: PageAssessment; - readonly rightFieldPage: PageAssessment; - readonly omittedMethodItems: number; - readonly omittedFieldItems: number; - readonly omittedCandidates: number; } export const buildComparisonCoverage = ({ left, right, - leftMethodPage, - rightMethodPage, - leftFieldPage, - rightFieldPage, - omittedMethodItems, - omittedFieldItems, - omittedCandidates, }: ComparisonCoverageInput): ManagedMemberComparisonResult["coverage"] => { - const omittedMethods = - omittedMethodItems + - leftMethodPage.sourceOmittedCount + - rightMethodPage.sourceOmittedCount; - const omittedFields = - omittedFieldItems + - leftFieldPage.sourceOmittedCount + - rightFieldPage.sourceOmittedCount; - const leftStatus = sideCoverageStatus( - left, - leftMethodPage.sourceComplete && leftFieldPage.sourceComplete, - ); - const rightStatus = sideCoverageStatus( - right, - rightMethodPage.sourceComplete && rightFieldPage.sourceComplete, - ); + const leftStatus = sideCoverageStatus(left); + const rightStatus = sideCoverageStatus(right); const unknownInput = left.coverage.state !== "complete" || right.coverage.state !== "complete"; - const truncated = omittedMethods + omittedFields + omittedCandidates > 0; return { - status: unknownInput - ? "partial" - : truncated - ? "truncated" - : leftStatus === "complete" && rightStatus === "complete" - ? "complete-within-inputs" - : "partial", + status: + !unknownInput && leftStatus === "complete" && rightStatus === "complete" + ? "complete-within-inputs" + : "partial", left_status: leftStatus, right_status: rightStatus, - omitted_methods: omittedMethods, - omitted_fields: omittedFields, - omitted_candidates: omittedCandidates, }; }; const sideCoverageStatus = ( result: ManagedMemberInspection, - pagesComplete: boolean, ): ManagedMemberComparisonResult["coverage"]["left_status"] => result.coverage.state === "unavailable" ? "unavailable" - : result.coverage.state === "complete" && pagesComplete + : result.coverage.state === "complete" ? "complete" : "partial"; @@ -85,8 +44,8 @@ export const sideManifest = ( mvid: side.result.module?.mvid ?? null, module_name: side.result.module?.name ?? null, metadata_status: side.result.metadata.status, - methods_total: side.result.methods.total, - fields_total: side.result.fields.total, + methods_total: side.result.methods.length, + fields_total: side.result.fields.length, }); export const buildComparisonSummary = ( @@ -126,26 +85,12 @@ export const buildComparisonMatching = ( export const comparisonLimitations = ( left: ManagedMemberInspection, right: ManagedMemberInspection, - omittedItems: number, - omittedCandidates: number, ): string[] => { const limitations: string[] = [ "Metadata tokens are build-local coordinates; matched pairs are remaps, not persistent identities.", "Names are reported as observations but are not used as a matching basis.", ]; - if (!left.methods.complete || !right.methods.complete) - limitations.push("At least one method page is incomplete."); - if (!left.fields.complete || !right.fields.complete) - limitations.push("At least one field page is incomplete."); if (left.coverage.state !== "complete" || right.coverage.state !== "complete") limitations.push("At least one managed member observation is partial."); - if (omittedItems > 0) - limitations.push( - `${String(omittedItems)} comparison items were omitted by output limits.`, - ); - if (omittedCandidates > 0) - limitations.push( - `${String(omittedCandidates)} ambiguous candidates were omitted by candidate limits.`, - ); return limitations; }; diff --git a/src/domain/managedMemberComparisonItems.ts b/src/domain/managedMemberComparisonItems.ts index 9a38b02924..a866227fbd 100644 --- a/src/domain/managedMemberComparisonItems.ts +++ b/src/domain/managedMemberComparisonItems.ts @@ -1,18 +1,15 @@ import canonicalize from "canonicalize"; import type { ManagedMemberInspection } from "./managedArtifact.js"; -import type { - CompareManagedMembersInput, - ManagedMemberComparisonResult, -} from "./managedMemberComparison.js"; +import type { ManagedMemberComparisonResult } from "./managedMemberComparison.js"; import { type ManagedFieldMatches, type ManagedMethodMatches, sha256, } from "./managedMemberComparisonMatch.js"; -type Method = ManagedMemberInspection["methods"]["items"][number]; -type Field = ManagedMemberInspection["fields"]["items"][number]; +type Method = ManagedMemberInspection["methods"][number]; +type Field = ManagedMemberInspection["fields"][number]; type MethodItem = ManagedMemberComparisonResult["methods"][number]; type FieldItem = ManagedMemberComparisonResult["fields"][number]; type UnmatchedComparison = Extract< @@ -29,7 +26,6 @@ interface ComparisonItemContext { readonly rightEvidenceId: string; readonly leftComplete: boolean; readonly rightComplete: boolean; - readonly limits: CompareManagedMembersInput["limits"]; } const changedMethodDimensions = ( @@ -113,7 +109,7 @@ const methodOnlyItem = ( limitations: absenceObserved ? [] : [ - "unknown-within-unobserved-page: The right method page is incomplete, so absence was not observed.", + "unknown-within-incomplete-metadata: The right method inventory is incomplete, so absence was not observed.", ], }; } @@ -130,7 +126,7 @@ const methodOnlyItem = ( limitations: absenceObserved ? [] : [ - "unknown-within-unobserved-page: The left method page is incomplete, so absence was not observed.", + "unknown-within-incomplete-metadata: The left method inventory is incomplete, so absence was not observed.", ], }; }; @@ -151,7 +147,7 @@ const fieldOnlyItem = ( limitations: absenceObserved ? [] : [ - "unknown-within-unobserved-page: The right field page is incomplete, so absence was not observed.", + "unknown-within-incomplete-metadata: The right field inventory is incomplete, so absence was not observed.", ], }; } @@ -167,7 +163,7 @@ const fieldOnlyItem = ( limitations: absenceObserved ? [] : [ - "unknown-within-unobserved-page: The left field page is incomplete, so absence was not observed.", + "unknown-within-incomplete-metadata: The left field inventory is incomplete, so absence was not observed.", ], }; }; @@ -175,7 +171,7 @@ const fieldOnlyItem = ( export const buildMethodItems = ( matches: ManagedMethodMatches, context: ComparisonItemContext, -): { readonly items: MethodItem[]; readonly omitted: number } => { +): MethodItem[] => { const items: MethodItem[] = []; for (const pair of matches.pairs) { const dimensions = changedMethodDimensions(pair.left.item, pair.right.item); @@ -228,13 +224,13 @@ export const buildMethodItems = ( items.push(methodOnlyItem({ left: item.item }, context)); for (const item of matches.rightOnly) items.push(methodOnlyItem({ right: item.item }, context)); - return limitItems(items, context.limits.max_method_matches); + return items; }; export const buildFieldItems = ( matches: ManagedFieldMatches, context: ComparisonItemContext, -): { readonly items: FieldItem[]; readonly omitted: number } => { +): FieldItem[] => { const items: FieldItem[] = []; for (const pair of matches.pairs) { const changed = @@ -285,13 +281,5 @@ export const buildFieldItems = ( items.push(fieldOnlyItem({ left: item.item }, context)); for (const item of matches.rightOnly) items.push(fieldOnlyItem({ right: item.item }, context)); - return limitItems(items, context.limits.max_field_matches); + return items; }; - -const limitItems = ( - items: readonly Item[], - limit: number, -): { readonly items: Item[]; readonly omitted: number } => ({ - items: items.slice(0, limit), - omitted: Math.max(0, items.length - limit), -}); diff --git a/src/domain/managedMemberComparisonMatch.ts b/src/domain/managedMemberComparisonMatch.ts index c8d8f5126a..474840d7d5 100644 --- a/src/domain/managedMemberComparisonMatch.ts +++ b/src/domain/managedMemberComparisonMatch.ts @@ -20,8 +20,8 @@ export const sha256 = (value: JsonValue): string => { return createHash("sha256").update(serialized).digest("hex"); }; -type Method = ManagedMemberInspection["methods"]["items"][number]; -type Field = ManagedMemberInspection["fields"]["items"][number]; +type Method = ManagedMemberInspection["methods"][number]; +type Field = ManagedMemberInspection["fields"][number]; type MatchBasis = ManagedMemberComparisonResult["methods"][number]["match"]["basis"]; type ConcreteMatchBasis = Exclude; @@ -107,12 +107,10 @@ const stableKey = (value: JsonValue): string => sha256(value); const matchMethods = ( left: readonly Keyed[], right: readonly Keyed[], - maxCandidates: number, ) => matchByKeys({ left, right, - maxCandidates, exactBasis: "exact-il-signature", fallbackBases: ["structural-method-shape"], }); @@ -120,12 +118,10 @@ const matchMethods = ( const matchFields = ( left: readonly Keyed[], right: readonly Keyed[], - maxCandidates: number, ) => matchByKeys({ left, right, - maxCandidates, exactBasis: "field-signature", fallbackBases: [], }); @@ -136,7 +132,6 @@ export type ManagedFieldMatches = ReturnType; interface MatchByKeysInput { readonly left: readonly Keyed[]; readonly right: readonly Keyed[]; - readonly maxCandidates: number; readonly exactBasis: ConcreteMatchBasis; readonly fallbackBases: readonly ConcreteMatchBasis[]; } @@ -144,7 +139,6 @@ interface MatchByKeysInput { const matchByKeys = ({ left, right, - maxCandidates, exactBasis, fallbackBases, }: MatchByKeysInput): { @@ -152,13 +146,11 @@ const matchByKeys = ({ readonly ambiguous: readonly Ambiguous[]; readonly leftOnly: readonly Keyed[]; readonly rightOnly: readonly Keyed[]; - readonly omittedCandidates: number; } => { const usedLeft = new Set>(); const usedRight = new Set>(); const pairs: MatchedPair[] = []; const ambiguous: Ambiguous[] = []; - let omittedCandidates = 0; const rounds: readonly { readonly basis: ConcreteMatchBasis; readonly key: (item: Keyed) => string | null; @@ -200,13 +192,9 @@ const matchByKeys = ({ } else { for (const item of leftItems) usedLeft.add(item); for (const item of rightItems) usedRight.add(item); - omittedCandidates += Math.max( - 0, - leftItems.length + rightItems.length - maxCandidates * 2, - ); ambiguous.push({ - left: leftItems.slice(0, maxCandidates), - right: rightItems.slice(0, maxCandidates), + left: leftItems, + right: rightItems, basis: round.basis, }); } @@ -217,7 +205,6 @@ const matchByKeys = ({ ambiguous, leftOnly: left.filter((item) => !usedLeft.has(item)), rightOnly: right.filter((item) => !usedRight.has(item)), - omittedCandidates, }; }; @@ -239,20 +226,17 @@ const groupBy = ( export const keyMembers = ( left: ManagedMemberComparisonSide, right: ManagedMemberComparisonSide, - maxCandidates: number, ): { readonly methodMatches: ReturnType; readonly fieldMatches: ReturnType; } => ({ methodMatches: matchMethods( - left.result.methods.items.map(keyMethod), - right.result.methods.items.map(keyMethod), - maxCandidates, + left.result.methods.map(keyMethod), + right.result.methods.map(keyMethod), ), fieldMatches: matchFields( - left.result.fields.items.map(keyField), - right.result.fields.items.map(keyField), - maxCandidates, + left.result.fields.map(keyField), + right.result.fields.map(keyField), ), }); diff --git a/src/domain/managedNativeVerification.ts b/src/domain/managedNativeVerification.ts index 1a3ab07c19..2b77f107c4 100644 --- a/src/domain/managedNativeVerification.ts +++ b/src/domain/managedNativeVerification.ts @@ -52,15 +52,12 @@ export const verifyManagedNativeBoundaries = ( ): ManagedNativeVerificationResult => { const managed = managedBoundaryFromInput(input); const managedEvidence = parseEvidence(input.managed_boundaries); - const native = collectNativeSymbols( - input.native_observations.slice(0, input.limits.max_native_observations), - ); - const verifiedPinvokes = managed.pinvoke_imports.items.map((item) => + const native = collectNativeSymbols(input.native_observations); + const verifiedPinvokes = managed.pinvoke_imports.map((item) => verifyPinvoke({ item, managedEvidenceId: managedEvidence.evidence_id, native, - input, }), ); const pinvokeImports = verifiedPinvokes.map( @@ -71,7 +68,6 @@ export const verifyManagedNativeBoundaries = ( managed, native, pinvokeImports, - verifiedPinvokes, input, }); return managedNativeVerificationResultSchema.parse({ diff --git a/src/domain/managedNativeVerificationMatch.ts b/src/domain/managedNativeVerificationMatch.ts index a9ee950bb8..dd3367cc99 100644 --- a/src/domain/managedNativeVerificationMatch.ts +++ b/src/domain/managedNativeVerificationMatch.ts @@ -23,11 +23,9 @@ const digest = (value: JsonValue): string => { return createHash("sha256").update(serialized).digest("hex"); }; -type PinvokeImport = - ManagedNativeBoundaryInspection["pinvoke_imports"]["items"][number]; +type PinvokeImport = ManagedNativeBoundaryInspection["pinvoke_imports"][number]; type VerifiedPinvoke = { readonly verification: PinvokeVerification; - readonly omittedCandidates: number; }; const moduleName = ( @@ -157,24 +155,21 @@ type PinvokeMatch< : never; interface PinvokeCandidateMatch { - readonly allCandidates: readonly NativeSymbol[]; readonly match: PinvokeMatch; } const matchPinvoke = ( managed: PinvokeImport, symbols: readonly NativeSymbol[], - maxCandidates: number, supportedNativeEvidence: number, ): PinvokeCandidateMatch => { const names = candidateNames(managed); const allCandidates = symbols.filter((symbol) => names.some((name) => sameSymbolName(name, symbol.name)), ); - const [first, ...remaining] = allCandidates.slice(0, maxCandidates); + const [first, ...remaining] = allCandidates; if (first === undefined) return { - allCandidates, match: { status: "unresolved", basis: @@ -199,7 +194,6 @@ const matchPinvoke = ( const selected = exact ?? decorated ?? first; if (!moduleCompatible(managed.import_scope_name, selected)) return { - allCandidates, match: { status: "contradicted", basis: "module-mismatch", @@ -210,7 +204,6 @@ const matchPinvoke = ( }; if (exact !== undefined) return { - allCandidates, match: { status: "verified", basis: @@ -223,7 +216,6 @@ const matchPinvoke = ( }, }; return { - allCandidates, match: { basis: "decorated-name-candidate", status: "inferred", @@ -265,14 +257,12 @@ interface VerifyPinvokeContext { readonly symbols: readonly NativeSymbol[]; readonly accepted: number; }; - readonly input: ManagedNativeVerificationInput; } export const verifyPinvoke = ({ item, managedEvidenceId, native, - input, }: VerifyPinvokeContext): VerifiedPinvoke => { const managed = { token: item.token, @@ -285,12 +275,7 @@ export const verifyPinvoke = ({ call_convention: item.call_convention, declaration_verification: item.verification, }; - const selection = matchPinvoke( - item, - native.symbols, - input.limits.max_candidates_per_import, - native.accepted, - ); + const selection = matchPinvoke(item, native.symbols, native.accepted); const limitations = pinvokeLimitations(selection.match.status, item); return { verification: pinvokeVerificationSchema.parse({ @@ -309,10 +294,6 @@ export const verifyPinvoke = ({ ], limitations, }), - omittedCandidates: Math.max( - 0, - selection.allCandidates.length - selection.match.candidates.length, - ), }; }; @@ -337,7 +318,6 @@ interface VerificationResultInput { readonly unsupported: number; }; readonly pinvokeImports: readonly PinvokeVerification[]; - readonly verifiedPinvokes: readonly VerifiedPinvoke[]; readonly input: ManagedNativeVerificationInput; } @@ -346,44 +326,22 @@ export const buildVerificationResult = ({ managed, native, pinvokeImports, - verifiedPinvokes, input, }: VerificationResultInput): Omit< ManagedNativeVerificationResult, "verification_id" > => { const counts = countStatuses(pinvokeImports); - const omittedNativeObservations = Math.max( - 0, - input.native_observations.length - input.limits.max_native_observations, - ); - const omittedCandidates = verifiedPinvokes.reduce( - (sum, item) => sum + item.omittedCandidates, - 0, - ); - const nativeBodyUnresolved = managed.native_implementations.items.filter( + const nativeBodyUnresolved = managed.native_implementations.filter( ({ boundary_kind: kind }) => kind !== "pinvoke", ).length; - const coverage: ManagedNativeVerificationResult["coverage"] = - omittedNativeObservations > 0 || omittedCandidates > 0 - ? { - status: "truncated", - omitted_native_observations: omittedNativeObservations, - omitted_candidates: omittedCandidates, - } - : managed.coverage.state === "complete" && native.unsupported === 0 - ? { - status: "complete-within-inputs", - omitted_native_observations: 0, - omitted_candidates: 0, - } - : { - status: "partial", - omitted_native_observations: 0, - omitted_candidates: 0, - }; + const coverage: ManagedNativeVerificationResult["coverage"] = { + status: + managed.coverage.state === "complete" && native.unsupported === 0 + ? "complete-within-inputs" + : "partial", + }; return { - schema_version: 1 as const, algorithm: { name: "rea-managed-native-verification" as const, version: 1 as const, @@ -396,8 +354,8 @@ export const buildVerificationResult = ({ artifact_path: managed.artifact.path, mvid: managed.module?.mvid ?? null, metadata_status: managed.metadata.status, - pinvoke_imports_total: managed.pinvoke_imports.total, - native_implementations_total: managed.native_implementations.total, + pinvoke_imports_total: managed.pinvoke_imports.length, + native_implementations_total: managed.native_implementations.length, coverage_state: managed.coverage.state, }, native_observations: { @@ -405,7 +363,6 @@ export const buildVerificationResult = ({ accepted: native.accepted, unsupported: native.unsupported, symbols: native.symbols.length, - truncated: omittedNativeObservations > 0, }, summary: { ...counts, @@ -420,9 +377,7 @@ export const buildVerificationResult = ({ coverage, evidence_links: [ managedEvidence.evidence_id, - ...input.native_observations - .slice(0, input.limits.max_native_observations) - .map(({ evidence_id: id }) => id), + ...input.native_observations.map(({ evidence_id: id }) => id), ], limitations: [ "P/Invoke verification checks declared import names against supplied native export or function-name Evidence only.", diff --git a/src/domain/managedNativeVerificationSchemas.ts b/src/domain/managedNativeVerificationSchemas.ts index b734a051d1..c0c2551ec9 100644 --- a/src/domain/managedNativeVerificationSchemas.ts +++ b/src/domain/managedNativeVerificationSchemas.ts @@ -8,11 +8,6 @@ const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const tokenSchema = z.string().regex(/^0x[0-9a-f]{8}$/u); const boundedTextSchema = z.string().min(1).max(4_096); -const nativeVerificationLimitsSchema = z.strictObject({ - max_native_observations: z.number().int().min(1).max(50).default(20), - max_candidates_per_import: z.number().int().min(1).max(100).default(25), -}); - const nativeSymbolSchema = z.strictObject({ evidence_id: evidenceIdSchema, operation: z.string().min(1), @@ -46,14 +41,13 @@ const pinvokeVerificationContextShape = { ]), declaration_verification: z.literal("managed-declaration-only"), }), - evidence_links: z.array(evidenceIdSchema).min(1).max(51), - limitations: z.array(boundedTextSchema).max(100), + evidence_links: z.array(evidenceIdSchema).min(1), + limitations: z.array(boundedTextSchema), }; const observedCandidatesSchema = z .tuple([nativeSymbolSchema]) - .rest(nativeSymbolSchema) - .check(z.maxLength(100)); + .rest(nativeSymbolSchema); export const pinvokeVerificationSchema = z.discriminatedUnion("status", [ z.strictObject({ @@ -96,11 +90,7 @@ export type PinvokeVerification = z.infer; export const managedNativeVerificationInputSchema = z .strictObject({ managed_boundaries: evidenceSchema, - native_observations: z.array(evidenceSchema).min(1).max(50), - limits: nativeVerificationLimitsSchema.default({ - max_native_observations: 20, - max_candidates_per_import: 25, - }), + native_observations: z.array(evidenceSchema).min(1), unknown_registry_approved: z.literal(true).optional(), }) .superRefine((input, context) => { @@ -129,38 +119,13 @@ export type ManagedNativeVerificationInput = z.infer< typeof managedNativeVerificationInputSchema >; -const completeVerificationCoverageSchema = z.strictObject({ - status: z.literal("complete-within-inputs"), - omitted_native_observations: z.literal(0), - omitted_candidates: z.literal(0), +const verificationCoverageSchema = z.strictObject({ + status: z.enum(["complete-within-inputs", "partial"]), }); -const partialVerificationCoverageSchema = z.strictObject({ - status: z.literal("partial"), - omitted_native_observations: z.literal(0), - omitted_candidates: z.literal(0), -}); -const truncatedVerificationCoverageSchema = z.union([ - z.strictObject({ - status: z.literal("truncated"), - omitted_native_observations: z.number().int().positive(), - omitted_candidates: z.number().int().min(0), - }), - z.strictObject({ - status: z.literal("truncated"), - omitted_native_observations: z.literal(0), - omitted_candidates: z.number().int().positive(), - }), -]); -const verificationCoverageSchema = z.union([ - completeVerificationCoverageSchema, - partialVerificationCoverageSchema, - truncatedVerificationCoverageSchema, -]); /** Provider-neutral managed/native verification result. */ export const managedNativeVerificationResultSchema = z .strictObject({ - schema_version: z.literal(1), verification_id: z.string().regex(/^mnv_[a-f0-9]{64}$/u), algorithm: z.strictObject({ name: z.literal("rea-managed-native-verification"), @@ -183,7 +148,6 @@ export const managedNativeVerificationResultSchema = z accepted: z.number().int().min(0), unsupported: z.number().int().min(0), symbols: z.number().int().min(0), - truncated: z.boolean(), }), summary: z.strictObject({ verified: z.number().int().min(0), @@ -192,38 +156,25 @@ export const managedNativeVerificationResultSchema = z contradicted: z.number().int().min(0), native_body_unresolved: z.number().int().min(0), }), - pinvoke_imports: z.array(pinvokeVerificationSchema).max(50_000), + pinvoke_imports: z.array(pinvokeVerificationSchema), native_implementations: z.strictObject({ unresolved: z.number().int().min(0), reason: boundedTextSchema, }), coverage: verificationCoverageSchema, - evidence_links: z.array(evidenceIdSchema).min(2).max(51), - limitations: z.array(boundedTextSchema).max(1_000), + evidence_links: z.array(evidenceIdSchema).min(2), + limitations: z.array(boundedTextSchema), }) .superRefine((result, context) => { const observedNativeCount = result.native_observations.accepted + result.native_observations.unsupported; - if ( - observedNativeCount + result.coverage.omitted_native_observations !== - result.native_observations.total - ) + if (observedNativeCount !== result.native_observations.total) context.addIssue({ code: "custom", path: ["native_observations"], message: "Native observation counts must account for the total input", }); - if ( - result.native_observations.truncated !== - result.coverage.omitted_native_observations > 0 - ) - context.addIssue({ - code: "custom", - path: ["native_observations", "truncated"], - message: - "Native observation truncation must match omitted observations", - }); for (const status of [ "verified", "inferred", diff --git a/src/domain/managedReconstruction.ts b/src/domain/managedReconstruction.ts index 248d56a9f0..9f5867ef54 100644 --- a/src/domain/managedReconstruction.ts +++ b/src/domain/managedReconstruction.ts @@ -80,7 +80,6 @@ const importedMethodSchema = z.strictObject({ }); export const managedReconstructionImportResultSchema = z.strictObject({ - schema_version: z.literal(1), reconstruction_id: z.string().regex(/^mre_[a-f0-9]{64}$/u), phase: z.literal("reconstruction-import"), executed: z.literal(false), @@ -116,7 +115,7 @@ export type ManagedReconstructionImportResult = z.infer< typeof managedReconstructionImportResultSchema >; -type Member = ManagedMemberInspection["methods"]["items"][number]; +type Member = ManagedMemberInspection["methods"][number]; type ImportedMethod = ManagedReconstructionImportResult["methods"][number]; type StaticObservation = ManagedReconstructionImportResult["static_observation"]; @@ -138,7 +137,7 @@ const findObservedMethod = ( members: ManagedMemberInspection, candidate: ManagedReconstructionMethodInput, ): Member | undefined => - members.methods.items.find( + members.methods.find( (item) => item.token === candidate.token && item.signature.raw_sha256 === candidate.signature_sha256 && @@ -244,7 +243,6 @@ const buildReconstructionWithoutId = ( members: ManagedMemberInspection, methods: readonly ImportedMethod[], ): Omit => ({ - schema_version: 1 as const, phase: "reconstruction-import" as const, executed: false as const, static_observation: buildStaticObservation(staticEvidence, members), diff --git a/src/domain/managedRuntimeCorrelation.ts b/src/domain/managedRuntimeCorrelation.ts index 881c099125..71f4af220d 100644 --- a/src/domain/managedRuntimeCorrelation.ts +++ b/src/domain/managedRuntimeCorrelation.ts @@ -57,7 +57,6 @@ export const managedRuntimeCorrelationInputSchema = z.strictObject({ }); export const managedRuntimeCorrelationResultSchema = z.strictObject({ - schema_version: z.literal(1), correlation_id: z.string().regex(/^mrc_[a-f0-9]{64}$/u), phase: z.literal("admission-plan"), executed: z.literal(false), @@ -140,7 +139,7 @@ export const planManagedRuntimeCorrelation = ( const members = managedMemberInspectionSchema.parse( staticEvidence.normalized_result, ); - const method = members.methods.items.find( + const method = members.methods.find( (item) => item.token === input.method.token && item.signature.raw_sha256 === input.method.signature_sha256 && @@ -154,7 +153,6 @@ export const planManagedRuntimeCorrelation = ( "Requested method lock does not match a static managed member observation", ); const withoutId = { - schema_version: 1 as const, phase: "admission-plan" as const, executed: false as const, authority_model: { diff --git a/src/domain/nativeApiBoundary.ts b/src/domain/nativeApiBoundary.ts index fa27f5995f..a59a2b5ebf 100644 --- a/src/domain/nativeApiBoundary.ts +++ b/src/domain/nativeApiBoundary.ts @@ -143,7 +143,6 @@ const nativeApiInspectionSubstepSchema = z /** Agent-facing projection of structured native API reconstruction substeps. */ export const nativeApiInspectionResultSchema = z .object({ - schema_version: z.literal(1), procedure: z .object({ address: z.string().min(1), diff --git a/src/domain/nodeRuntimeCharacterization.ts b/src/domain/nodeRuntimeCharacterization.ts index 07514a5e75..51046c115d 100644 --- a/src/domain/nodeRuntimeCharacterization.ts +++ b/src/domain/nodeRuntimeCharacterization.ts @@ -69,7 +69,6 @@ export const nodeCharacterizationExecutionInputSchema = z.strictObject({ }); export const nodeCharacterizationPreparationOutputSchema = z.strictObject({ - schema_version: z.literal(1), phase: z.literal("preparation"), plan: nodeRuntimeCharacterizationPlanSchema, transformation: javascriptExportTransformationManifestSchema, @@ -78,7 +77,6 @@ export const nodeCharacterizationPreparationOutputSchema = z.strictObject({ }); export const nodeCharacterizationExecutionOutputSchema = z.strictObject({ - schema_version: z.literal(1), phase: z.literal("execution"), plan: nodeRuntimeCharacterizationPlanSchema, transformation: javascriptExportTransformationManifestSchema, diff --git a/src/domain/permissionPolicy.ts b/src/domain/permissionPolicy.ts index c781ca2262..061c5a9101 100644 --- a/src/domain/permissionPolicy.ts +++ b/src/domain/permissionPolicy.ts @@ -12,7 +12,6 @@ export const PERMISSION_CAPABILITIES = [ "v8_inspector_observe", "evidence_read", "evidence_write", - "investigation_input", "investigation_workspace_read", "investigation_workspace_write", "snapshot_read", diff --git a/src/domain/processCapture.comparison.test.ts b/src/domain/processCapture.comparison.test.ts index 0cad15d7dd..37bbecaf6e 100644 --- a/src/domain/processCapture.comparison.test.ts +++ b/src/domain/processCapture.comparison.test.ts @@ -7,7 +7,6 @@ import { it("classifies missing observations as unknown and one-sided evidence as added", () => { const base = { - schema_version: 4 as const, manifest: emptyCapture().manifest, settlement: emptyCapture().settlement, normalization: { @@ -88,7 +87,6 @@ it("treats equivalent normalization records as equal regardless of member order" it("compares raw terminal chunks even when rendered states agree", () => { const capture = { - schema_version: 4 as const, manifest: emptyCapture().manifest, settlement: emptyCapture().settlement, normalization: { @@ -133,7 +131,6 @@ it("compares raw terminal chunks even when rendered states agree", () => { it("keeps filesystem evidence unknown when stable snapshots match", () => { const capture = { - schema_version: 4 as const, manifest: emptyCapture().manifest, settlement: emptyCapture().settlement, normalization: { diff --git a/src/domain/processCapture.traceProjection.test.ts b/src/domain/processCapture.traceProjection.test.ts index a2190ed721..8ed946c0e3 100644 --- a/src/domain/processCapture.traceProjection.test.ts +++ b/src/domain/processCapture.traceProjection.test.ts @@ -8,7 +8,6 @@ import { it("detects changes in normalized process sample metadata", () => { const capture = { - schema_version: 4 as const, manifest: emptyCapture().manifest, settlement: emptyCapture().settlement, normalization: { diff --git a/src/domain/processCapture.ts b/src/domain/processCapture.ts index 11d39b574c..9753516551 100644 --- a/src/domain/processCapture.ts +++ b/src/domain/processCapture.ts @@ -1,10 +1,7 @@ import { z } from "zod"; import { jsonValueSchema } from "./jsonValue.js"; -import { - LEGACY_PROCESS_CAPTURE_MESSAGE, - normalizationSchema, -} from "./processScenario.js"; +import { normalizationSchema } from "./processScenario.js"; import type { ProcessReactiveStatus, ProcessReactiveTransitionRecord, @@ -203,13 +200,12 @@ export type ProcessSettlement = }; /** - * Process Capture v4 observation set. + * Process capture observation set. * * `truncated` and `residual_unknowns` are semantic evidence: consumers must not * infer equivalence from matching bounded observations when either is present. */ export interface UnverifiedProcessCapture { - readonly schema_version: 4; readonly manifest: { readonly rea_version: string; readonly provider_version: string; @@ -329,12 +325,9 @@ const fileEffectSchema = z.discriminatedUnion("status", [ after: fileStateSchema, }), ]); -/** Exact serialized shape of a bounded process capture. */ +/** Exact serialized shape of a process capture. */ const processCaptureShapeSchema: z.ZodType = z.object( { - schema_version: z.literal(4, { - error: LEGACY_PROCESS_CAPTURE_MESSAGE, - }), manifest: z.object({ rea_version: z.string().min(1), provider_version: z.string().min(1), @@ -505,7 +498,7 @@ const processCaptureShapeSchema: z.ZodType = z.object( }, ); -/** Exact serialized shape plus all Process Capture v4 semantic invariants. */ +/** Exact serialized shape plus all process-capture semantic invariants. */ export const processCaptureSchema = processCaptureShapeSchema.superRefine( (capture, context) => { for (const issue of collectProcessCaptureIssues(capture)) diff --git a/src/domain/processCapture.validation.test.ts b/src/domain/processCapture.validation.test.ts index 72a94f3a91..43653cb2ed 100644 --- a/src/domain/processCapture.validation.test.ts +++ b/src/domain/processCapture.validation.test.ts @@ -2,9 +2,7 @@ import { expect, it } from "vitest"; import { digestProcessCommitment, - LEGACY_PROCESS_CAPTURE_MESSAGE, parseProcessCapture, - processCaptureSchema, type UnverifiedProcessCapture, } from "./processCapture.js"; import { @@ -15,7 +13,6 @@ import { it("never considers truncated captures equivalent", () => { const capture = { - schema_version: 4 as const, manifest: emptyCapture().manifest, settlement: emptyCapture().settlement, normalization: { @@ -220,17 +217,6 @@ it.each([ }, ); -it("tells agents and users to recapture unsupported v3 evidence", () => { - const legacy = { ...emptyCapture(), schema_version: 3 }; - expect(() => parseProcessCapture(legacy)).toThrow( - LEGACY_PROCESS_CAPTURE_MESSAGE, - ); - const parsed = processCaptureSchema.safeParse(legacy); - expect(parsed.success).toBe(false); - if (parsed.success) throw new Error("expected legacy capture rejection"); - expect(parsed.error.issues[0]?.message).toBe(LEGACY_PROCESS_CAPTURE_MESSAGE); -}); - 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 70d0971b23..7302a2f13d 100644 --- a/src/domain/processCaptureExample.ts +++ b/src/domain/processCaptureExample.ts @@ -15,7 +15,6 @@ const replayPlan = {}; /** Minimal valid process capture retained as a public contract example. */ export const EMPTY_PROCESS_CAPTURE_EXAMPLE = { - schema_version: 4, manifest: { rea_version: "1.1.0", provider_version: "3", diff --git a/src/domain/processCaptureParsing.ts b/src/domain/processCaptureParsing.ts index e3e3ca5195..dda070e590 100644 --- a/src/domain/processCaptureParsing.ts +++ b/src/domain/processCaptureParsing.ts @@ -1,5 +1,4 @@ import { - LEGACY_PROCESS_CAPTURE_MESSAGE, processCaptureSchema, type UnverifiedProcessCapture, } from "./processCapture.js"; @@ -8,7 +7,7 @@ declare class ProcessCaptureProof { private readonly verified: never; } -/** Semantically verified Process Capture v4 value. */ +/** Semantically verified process capture value. */ export type ProcessCapture = UnverifiedProcessCapture & ProcessCaptureProof; const verifiedCaptures = new WeakSet(); @@ -23,15 +22,8 @@ const attachProof = (capture: UnverifiedProcessCapture): ProcessCapture => { throw new TypeError("Process Capture proof ownership failed"); }; -/** Parse unknown input as v4 and reject invalid commitments or semantics. */ +/** Parse unknown input and reject invalid commitments or semantics. */ export const parseProcessCapture = (input: unknown): ProcessCapture => { - if ( - typeof input === "object" && - input !== null && - "schema_version" in input && - input.schema_version === 3 - ) - throw new TypeError(LEGACY_PROCESS_CAPTURE_MESSAGE); const parsed = processCaptureSchema.safeParse(input); if (parsed.success) return attachProof(parsed.data); const issues = parsed.error.issues.flatMap((issue) => @@ -41,7 +33,7 @@ export const parseProcessCapture = (input: unknown): ProcessCapture => { ); if (issues.length > 0) throw new TypeError( - `Invalid Process Capture v4: ${issues.map(({ path, message }) => `${path}: ${message}`).join("; ")}`, + `Invalid process capture: ${issues.map(({ path, message }) => `${path}: ${message}`).join("; ")}`, ); throw parsed.error; }; diff --git a/src/domain/processCaptureReactiveSchema.ts b/src/domain/processCaptureReactiveSchema.ts index dfbfa5c6c1..f9773cb087 100644 --- a/src/domain/processCaptureReactiveSchema.ts +++ b/src/domain/processCaptureReactiveSchema.ts @@ -72,7 +72,7 @@ const processReactiveRunShape = { .max(PROCESS_REACTIVE_LIMITS.transitions), }; -/** Serialized reactive reducer state admitted by Process Capture v4. */ +/** Serialized reactive reducer state admitted by process capture. */ export const processReactiveRunSchema = z.discriminatedUnion("status", [ z.object({ status: z.literal("running"), diff --git a/src/domain/processComparison.ts b/src/domain/processComparison.ts index ab5848fc59..2f590ae24c 100644 --- a/src/domain/processComparison.ts +++ b/src/domain/processComparison.ts @@ -244,9 +244,8 @@ const assertComparable = ( options: { readonly maxCaptureAgeMs?: number; readonly now?: () => number }, ): void => { if ( - left.schema_version !== right.schema_version || left.manifest.comparison_contract_sha256 !== - right.manifest.comparison_contract_sha256 + right.manifest.comparison_contract_sha256 ) throw new TypeError( "Process captures have incompatible comparison contracts", @@ -387,7 +386,7 @@ const compareDimensions = ( }; /** - * Compare two Process Capture v4 observations without treating absence as proof. + * Compare two process capture observations without treating absence as proof. * * Observed differences outrank residual unknowns. A capture may therefore be * definitively changed in one dimension while completeness remains unknown. diff --git a/src/domain/processScenario.ts b/src/domain/processScenario.ts index c08a030d37..5bc752328f 100644 --- a/src/domain/processScenario.ts +++ b/src/domain/processScenario.ts @@ -43,10 +43,6 @@ const outputChunkSchema = z.object({ data: z.string().max(1_000_000), }); -/** Actionable refusal shared by CLI, MCP, and Evidence import boundaries. */ -export const LEGACY_PROCESS_CAPTURE_MESSAGE = - "Process Capture v3 is unsupported. Re-run the scenario with this REA version using capture_process_scenario to produce Process Capture v4; captures cannot be upgraded because v4 requires new manifest and settlement evidence."; - /** Compute a canonical SHA-256 commitment independent of object key order. */ export const digestProcessCommitment = (value: unknown): string => { const serialized = canonicalize(value); @@ -78,7 +74,7 @@ const reactiveScenarioCommitment = ( })), }; -/** Build the secret-safe scenario projection committed by Process Capture v4. */ +/** Build the secret-safe scenario projection committed by process-capture Evidence. */ export const processScenarioCommitment = ( scenario: ProcessScenario, executableSha256?: string, diff --git a/src/domain/processTraceComparisonPart2.test.ts b/src/domain/processTraceComparisonPart2.test.ts index 13b37fe692..249ac8dab5 100644 --- a/src/domain/processTraceComparisonPart2.test.ts +++ b/src/domain/processTraceComparisonPart2.test.ts @@ -257,7 +257,7 @@ describe("process trace comparison", () => { event_journal: (complete.event_journal ?? []).slice(1), }; expect(() => parseProcessCapture(incompleteJournal)).toThrow( - "Invalid Process Capture v4: event_journal.0.capture_order", + "Invalid process capture: event_journal.0.capture_order", ); }); }); diff --git a/src/domain/reconstructionCoverage.test.ts b/src/domain/reconstructionCoverage.test.ts index a3dc796d2d..8c9f843a45 100644 --- a/src/domain/reconstructionCoverage.test.ts +++ b/src/domain/reconstructionCoverage.test.ts @@ -41,7 +41,6 @@ describe("reconstruction coverage closure", () => { const { revision_sha256: _revisionSha256, workspace_id: _workspaceId, - schema_version: _schemaVersion, ...semantic } = workspace; const boundary = workspace.boundaries[0]; @@ -91,7 +90,6 @@ describe("reconstruction coverage closure", () => { const { revision_sha256: _revisionSha256, workspace_id: _workspaceId, - schema_version: _schemaVersion, ...semantic } = workspace; const changed = createReconstructionCoverageWorkspace({ @@ -131,7 +129,6 @@ describe("reconstruction coverage closure", () => { const { revision_sha256: _revisionSha256, workspace_id: _workspaceId, - schema_version: _schemaVersion, ...semantic } = workspace; const stale = createReconstructionCoverageWorkspace({ @@ -166,7 +163,6 @@ describe("reconstruction coverage verifier observations", () => { const { revision_sha256: _revisionSha256, workspace_id: _workspaceId, - schema_version: _schemaVersion, ...semantic } = workspace; const changed = createReconstructionCoverageWorkspace({ @@ -203,7 +199,6 @@ describe("reconstruction coverage verifier observations", () => { const { revision_sha256: _revisionSha256, workspace_id: _workspaceId, - schema_version: _schemaVersion, ...semantic } = workspace; const changed = createReconstructionCoverageWorkspace({ @@ -232,7 +227,6 @@ describe("reconstruction coverage verifier observations", () => { const { revision_sha256: _revisionSha256, workspace_id: _workspaceId, - schema_version: _schemaVersion, ...semantic } = workspace; const incomplete = createReconstructionCoverageWorkspace({ diff --git a/src/domain/reconstructionCoverage.ts b/src/domain/reconstructionCoverage.ts index 6ee0353481..7a8eff7989 100644 --- a/src/domain/reconstructionCoverage.ts +++ b/src/domain/reconstructionCoverage.ts @@ -159,7 +159,6 @@ const boundarySchema = z.strictObject({ }); const workspaceSemanticSchema = z.strictObject({ - schema_version: z.literal(1), workspace_id: z.string().regex(/^rcw_[a-f0-9]{64}$/u), name: z.string().trim().min(1).max(200), revision: z.number().int().min(1), @@ -260,14 +259,10 @@ export const createReconstructionVerifierContract = ( /** Build one canonical immutable coverage-workspace revision. */ export const createReconstructionCoverageWorkspace = ( - input: Omit< - z.input, - "schema_version" | "workspace_id" - >, + input: Omit, "workspace_id">, ): ReconstructionCoverageWorkspace => { const semanticInput = { - schema_version: 1 as const, - workspace_id: `rcw_${digest({ schema: "rea.reconstruction-coverage-workspace/v1", name: input.name })}`, + workspace_id: `rcw_${digest({ name: input.name })}`, ...input, }; const semantic = canonicalWorkspace( diff --git a/src/domain/reconstructionObligationLedgerSchemas.ts b/src/domain/reconstructionObligationLedgerSchemas.ts index 08245c0b25..b81c3361fb 100644 --- a/src/domain/reconstructionObligationLedgerSchemas.ts +++ b/src/domain/reconstructionObligationLedgerSchemas.ts @@ -135,7 +135,6 @@ export const reconstructionObligationManifestBindingSchema = z.strictObject({ }); export const reconstructionObligationManifestSchema = z.strictObject({ - schema_version: z.literal(1), bindings: z.array(reconstructionObligationManifestBindingSchema).max(10_000), contradictions: z .array( @@ -239,15 +238,11 @@ const countBySchema = ( export const reconstructionObligationLedgerSchema = z.strictObject({ schema: z.literal("ReconstructionObligationLedger"), - schema_version: z.literal(1), ledger_id: z.string().regex(/^rol_[a-f0-9]{64}$/u), closure_digest: digestSchema, status: z.enum(["ready", "open", "failed", "unknown"]), coverage: z.strictObject({ status: z.enum(["complete", "partial"]), - truncated: z.boolean(), - omitted_count: z.number().int().min(0), - max_obligations: z.number().int().min(1), }), summary: z.strictObject({ total: z.number().int().min(0), @@ -286,13 +281,8 @@ export const reconstructionObligationLedgerSchema = z.strictObject({ export const reconstructionObligationLedgerInputSchema = z.strictObject({ evidence_bundle: evidenceBundleSchema, - reviewed_obligations: z - .array(reviewedReconstructionObligationSchema) - .max(10_000), + reviewed_obligations: z.array(reviewedReconstructionObligationSchema), manifest: reconstructionObligationManifestSchema, - limits: z.strictObject({ - max_obligations: z.number().int().min(1).max(10_000), - }), page: z.strictObject({ offset: z.number().int().min(0).max(10_000), limit: z.number().int().min(1).max(100), diff --git a/src/domain/reconstructionReadiness.ts b/src/domain/reconstructionReadiness.ts index 6c2566cea5..2215232c96 100644 --- a/src/domain/reconstructionReadiness.ts +++ b/src/domain/reconstructionReadiness.ts @@ -64,7 +64,6 @@ export const createReconstructionReadinessReport = ( }); return reconstructionReadinessReportSchema.parse({ schema: "ReconstructionReadinessReport", - schema_version: 1, report_id: `rr_${reportDigest}`, report_digest: reportDigest, ...semantic, diff --git a/src/domain/reconstructionReadinessSchemas.ts b/src/domain/reconstructionReadinessSchemas.ts index 05b3e8cc10..35bb1f1481 100644 --- a/src/domain/reconstructionReadinessSchemas.ts +++ b/src/domain/reconstructionReadinessSchemas.ts @@ -191,7 +191,6 @@ const replaySchema = z.strictObject({ }); export const reconstructionReadinessInputSchema = z.strictObject({ - schema_version: z.literal(1), identity: z.strictObject({ cli_version: boundedTextSchema, server_version: boundedTextSchema, @@ -245,7 +244,6 @@ const findingSchema = z.strictObject({ export const reconstructionReadinessReportSchema = z.strictObject({ schema: z.literal("ReconstructionReadinessReport"), - schema_version: z.literal(1), report_id: z.string().regex(/^rr_[a-f0-9]{64}$/u), source_digest: digestSchema, report_digest: digestSchema, diff --git a/src/domain/reconstructionVerification.test.ts b/src/domain/reconstructionVerification.test.ts index 7504b06316..06afae7af9 100644 --- a/src/domain/reconstructionVerification.test.ts +++ b/src/domain/reconstructionVerification.test.ts @@ -33,7 +33,7 @@ const source = ( { predicateType: authority === "controlled-replay" - ? "rea.process-capture/v4" + ? "rea.process-capture" : "rea.analysis/v2", operation: authority === "controlled-replay" @@ -92,7 +92,7 @@ const processComparison = ( version: "3", }, { - predicateType: "rea.process-comparison/v3", + predicateType: "rea.process-comparison", operation: "compare_process_captures", parameters: { left_evidence_id: left.evidence_id, @@ -106,7 +106,6 @@ const processComparison = ( ); const behavioralSpec = (comparison: Evidence) => ({ - schema_version: 1 as const, name: "CLI compatibility", claims: [ { @@ -189,7 +188,6 @@ describe("reconstruction verification", () => { expect( verifyReconstruction( { - schema_version: 1, name: "Interaction reconstruction", claims: [ { @@ -288,7 +286,6 @@ describe("reconstruction verification", () => { const comparison = artifactComparison(left, right, true); const result = verifyReconstruction( { - schema_version: 1, name: "Artifact structure", claims: [ { @@ -343,7 +340,7 @@ describe("reconstruction verification integrity", () => { ]; const bundle = createEvidenceBundle([right, comparison, left]); const first = verifyReconstruction( - { schema_version: 1, name: "Compatibility", claims }, + { name: "Compatibility", claims }, bundle, 0, 1, @@ -352,7 +349,6 @@ describe("reconstruction verification integrity", () => { { name: "Compatibility", claims: [...claims].reverse(), - schema_version: 1, }, bundle, 0, diff --git a/src/domain/reconstructionVerification.ts b/src/domain/reconstructionVerification.ts index 78795812f7..663d299289 100644 --- a/src/domain/reconstructionVerification.ts +++ b/src/domain/reconstructionVerification.ts @@ -46,7 +46,7 @@ const MAX_CANONICAL_BYTES = 32 * 1024 * 1024; const providers = { behavioral: { operation: "compare_process_captures", - predicates: ["rea.process-comparison/v3", "rea.process-comparison/v4"], + predicates: ["rea.process-comparison"], id: "rea-process", name: "REA deterministic process harness", }, @@ -206,7 +206,7 @@ const validateSourceKinds = ( ): void => { const expected = claim.kind === "behavioral" - ? ["capture_process_scenario", "rea.process-capture/v4"] + ? ["capture_process_scenario", "rea.process-capture"] : claim.kind === "structural-function" ? ["analyze_function", "rea.analysis/v2"] : ["inventory_artifact", "rea.analysis/v2"]; diff --git a/src/domain/reconstructionVerificationSchemas.ts b/src/domain/reconstructionVerificationSchemas.ts index b9ad5ca86f..a7e8e39a37 100644 --- a/src/domain/reconstructionVerificationSchemas.ts +++ b/src/domain/reconstructionVerificationSchemas.ts @@ -56,7 +56,6 @@ const reconstructionClaimSchema = z.discriminatedUnion("kind", [ /** Finite, typed behavioral and structural specification. */ export const reconstructionSpecificationSchema = z .object({ - schema_version: z.literal(1), name: z.string().trim().min(1).max(200), claims: z.array(reconstructionClaimSchema).min(1).max(100), }) diff --git a/src/domain/replayMachineRun.test.ts b/src/domain/replayMachineRun.test.ts index 513af6f128..d5927cf645 100644 --- a/src/domain/replayMachineRun.test.ts +++ b/src/domain/replayMachineRun.test.ts @@ -109,7 +109,6 @@ describe("direct replay machine execution", () => { const result = runReplayMachine(loginRun()); expect(result).toMatchObject({ - schema_version: 1, initial_state: "login", final_state: "complete", terminal: true, diff --git a/src/domain/replayMachineRun.ts b/src/domain/replayMachineRun.ts index 0ce63f9db1..c631eea4ae 100644 --- a/src/domain/replayMachineRun.ts +++ b/src/domain/replayMachineRun.ts @@ -138,7 +138,6 @@ const replayMachineRunJournalEntrySchema = z.strictObject({ /** Capture-value-free result of directly evaluating a finite replay machine. */ export const replayMachineRunOutputSchema = z.strictObject({ - schema_version: z.literal(1), initial_state: replayRunIdentifierSchema, final_state: replayRunIdentifierSchema, terminal: z.boolean(), @@ -251,7 +250,6 @@ export const runReplayMachine = ( actions: actions.map((action) => redactAction(runtime, action)), })); return replayMachineRunOutputSchema.parse({ - schema_version: 1, initial_state: input.machine.initial_state, final_state: runtime.state, terminal: diff --git a/src/domain/runtimeIdentification.ts b/src/domain/runtimeIdentification.ts index 456cc13bba..cd3433a4f5 100644 --- a/src/domain/runtimeIdentification.ts +++ b/src/domain/runtimeIdentification.ts @@ -60,7 +60,6 @@ const runtimeIdentificationInputSchema = z.strictObject({ /** Provider-neutral runtime identification with explicit tooling availability. */ export const runtimeIdentificationResultSchema = z.strictObject({ - schema_version: z.literal(1), identification_id: z.string().regex(/^rid_[a-f0-9]{64}$/u), root_sha256: digestSchema, root_format: z.string().min(1).max(100), @@ -196,7 +195,6 @@ export const identifyRuntimes = ( "Runtime families are identified from exact artifact formats and paths; semantic claims require the named provider.", ]; const withoutId = { - schema_version: 1 as const, root_sha256: inventory.manifest.root_sha256, root_format: inventory.manifest.root_format, source_evidence_ids: evidence diff --git a/src/domain/sourceToBundleComparison.test.ts b/src/domain/sourceToBundleComparison.test.ts index fe30fed12a..4d053b52a7 100644 --- a/src/domain/sourceToBundleComparison.test.ts +++ b/src/domain/sourceToBundleComparison.test.ts @@ -250,7 +250,6 @@ const applicationGraph = (coverage: "complete" | "partial") => { ]; return createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: nodes.map(({ node_id: nodeId }) => nodeId), nodes, edges: [], diff --git a/src/domain/sourceToBundleComparison.ts b/src/domain/sourceToBundleComparison.ts index 5ca499e39e..39ff9dbd61 100644 --- a/src/domain/sourceToBundleComparison.ts +++ b/src/domain/sourceToBundleComparison.ts @@ -71,7 +71,6 @@ export const compareSourceToBundle = ( .map(({ node_id: nodeId }) => nodeId) .filter((nodeId) => !mappedCurrentIds.has(nodeId)); const semanticResult = { - schema_version: 1 as const, reference: { root_sha256: input.reference.root_sha256, inventory_state: input.reference.inventory_state, diff --git a/src/domain/sourceToBundleComparisonSchemas.ts b/src/domain/sourceToBundleComparisonSchemas.ts index 22fef6e88a..b9f7938bf3 100644 --- a/src/domain/sourceToBundleComparisonSchemas.ts +++ b/src/domain/sourceToBundleComparisonSchemas.ts @@ -90,7 +90,6 @@ const sourceToBundleItemSchema = z.strictObject({ /** Deterministic, evidence-bearing historical-source to shipped-bundle comparison. */ export const sourceToBundleComparisonResultSchema = z.strictObject({ - schema_version: z.literal(1), comparison_id: z.string().regex(/^stbc_[a-f0-9]{64}$/u), reference: z.strictObject({ root_sha256: digestSchema, diff --git a/src/domain/staticRuntimeCorrelation.test.ts b/src/domain/staticRuntimeCorrelation.test.ts index 7c48a6546f..5df9f95d80 100644 --- a/src/domain/staticRuntimeCorrelation.test.ts +++ b/src/domain/staticRuntimeCorrelation.test.ts @@ -18,7 +18,7 @@ const capture = (digit: string): Evidence => undefined, { id: "fixture", name: "Fixture", version: "1" }, { - predicateType: "rea.process-capture/v4", + predicateType: "rea.process-capture", operation: "capture_process_scenario", parameters: {}, result: { digit }, @@ -71,7 +71,7 @@ const processComparison = ( version: "3", }, { - predicateType: "rea.process-comparison/v3", + predicateType: "rea.process-comparison", operation: "compare_process_captures", parameters: { left_evidence_id: leftCapture.evidence_id, diff --git a/src/domain/staticRuntimeCorrelation.ts b/src/domain/staticRuntimeCorrelation.ts index 1cc4c1c129..dd2edd72cd 100644 --- a/src/domain/staticRuntimeCorrelation.ts +++ b/src/domain/staticRuntimeCorrelation.ts @@ -162,7 +162,7 @@ const EXPECTED: Readonly> = { "REA function comparison", ], compare_process_captures: [ - ["rea.process-comparison/v3", "rea.process-comparison/v4"], + "rea.process-comparison", "rea-process", "REA deterministic process harness", ], @@ -445,12 +445,24 @@ const comparisonParameterLinks = (evidence: Evidence): string[] => { } const parameters = z .object({ - left_evidence_ids: z.array(evidenceIdSchema).min(1).max(100), - right_evidence_ids: z.array(evidenceIdSchema).min(1).max(100), + left_evidence_id: evidenceIdSchema.optional(), + right_evidence_id: evidenceIdSchema.optional(), + left_evidence_ids: z.array(evidenceIdSchema).min(1).max(100).optional(), + right_evidence_ids: z.array(evidenceIdSchema).min(1).max(100).optional(), }) .passthrough() .parse(evidence.parameters); - return [...parameters.left_evidence_ids, ...parameters.right_evidence_ids]; + const left = + parameters.left_evidence_id === undefined + ? (parameters.left_evidence_ids ?? []) + : [parameters.left_evidence_id]; + const right = + parameters.right_evidence_id === undefined + ? (parameters.right_evidence_ids ?? []) + : [parameters.right_evidence_id]; + if (left.length === 0 || right.length === 0) + throw new TypeError("Comparison Evidence omitted its source parameters"); + return [...left, ...right]; }; const sameSet = (left: readonly string[], right: readonly string[]): boolean => diff --git a/src/domain/symbolAnalysis.test.ts b/src/domain/symbolAnalysis.test.ts index cad85a929f..94e74a9e28 100644 --- a/src/domain/symbolAnalysis.test.ts +++ b/src/domain/symbolAnalysis.test.ts @@ -8,7 +8,7 @@ import { } from "./symbolAnalysis.js"; describe("symbol analysis", () => { - it("filters Swift classes and reports the uncapped match count", () => { + it("returns every matching Swift class", () => { const symbols = Array.from({ length: 120 }, (_, index) => ({ address: `0x${String(index)}`, name: `_TtCFixture${String(index)}`, @@ -20,7 +20,7 @@ describe("symbol analysis", () => { !Array.isArray(result) ) { expect(result.count).toBe(120); - expect(result.classes).toHaveLength(100); + expect(result.classes).toHaveLength(120); expect(Array.isArray(result.classes) ? result.classes[0] : null).toEqual({ address: "0x0", name: "_TtCFixture0", diff --git a/src/domain/symbolAnalysis.ts b/src/domain/symbolAnalysis.ts index 8dda33eeea..c1ec545830 100644 --- a/src/domain/symbolAnalysis.ts +++ b/src/domain/symbolAnalysis.ts @@ -1,21 +1,17 @@ import type { JsonValue } from "./jsonValue.js"; import type { AddressedName } from "./hopperValues.js"; -const MAX_SCANNED_SYMBOLS = 5_000; -const MAX_RETURNED_SYMBOLS = 100; - /** Select Swift class symbols using the legacy `_TtC` convention. */ export const discoverSwiftClasses = ( procedures: readonly AddressedName[], pattern: string, ): JsonValue => { const classes = procedures - .slice(0, MAX_SCANNED_SYMBOLS) .filter(({ name }) => name.includes("_TtC")) .filter(({ name }) => pattern.length === 0 || name.includes(pattern)); return { count: classes.length, - classes: classes.slice(0, MAX_RETURNED_SYMBOLS).map(toJsonEntry), + classes: classes.map(toJsonEntry), }; }; @@ -33,7 +29,7 @@ export const discoverObjcClasses = ( ); return { count: classes.length, - classes: classes.slice(0, MAX_RETURNED_SYMBOLS).map(toJsonEntry), + classes: classes.map(toJsonEntry), }; }; @@ -48,7 +44,7 @@ export const discoverObjcProtocols = ( ); return { count: protocols.length, - protocols: protocols.slice(0, MAX_RETURNED_SYMBOLS).map(toJsonEntry), + protocols: protocols.map(toJsonEntry), }; }; @@ -71,7 +67,7 @@ export const categorizeSwiftTypes = ( ); const seen = new Set(); - for (const entry of procedures.slice(0, MAX_SCANNED_SYMBOLS)) { + for (const entry of procedures) { if (!entry.name.includes("_Tt") || seen.has(entry.name)) continue; seen.add(entry.name); const category = @@ -84,7 +80,7 @@ export const categorizeSwiftTypes = ( const categories = Object.fromEntries( Object.entries(groups).map(([category, items]) => [ category, - { count: items.length, items: items.slice(0, 50).map(toJsonEntry) }, + { count: items.length, items: items.map(toJsonEntry) }, ]), ); return { total: seen.size, categories }; diff --git a/src/domain/webBundleAnalysis.ts b/src/domain/webBundleAnalysis.ts index 8fca6e35f0..3d9ef55098 100644 --- a/src/domain/webBundleAnalysis.ts +++ b/src/domain/webBundleAnalysis.ts @@ -194,7 +194,6 @@ export type WebSourceMaps = z.infer; /** Provider-neutral result of bounded JavaScript bundle reverse engineering. */ export const webBundleAnalysisSchema = z.object({ - schema_version: z.literal(1), capture: z.object({ target_url: z.string(), scripts_observed: z.number().int().min(0), diff --git a/src/domain/webBundleAnalyzer.test.ts b/src/domain/webBundleAnalyzer.test.ts index 4940e3aa78..c15a805c22 100644 --- a/src/domain/webBundleAnalyzer.test.ts +++ b/src/domain/webBundleAnalyzer.test.ts @@ -158,7 +158,6 @@ const input = (overrides: Record = {}) => const inspection = (source: string) => webPageInspectionSchema.parse({ - schema_version: 2, browser: { product: "Fake Chrome", protocol_version: "1.3", diff --git a/src/domain/webBundleAnalyzerResult.ts b/src/domain/webBundleAnalyzerResult.ts index 6868dcfeec..a86d61854c 100644 --- a/src/domain/webBundleAnalyzerResult.ts +++ b/src/domain/webBundleAnalyzerResult.ts @@ -28,7 +28,6 @@ export const buildWebBundleAnalysis = ( accumulator.droppedFindings > 0 || sourceMaps.status === "truncated"; return webBundleAnalysisSchema.parse({ - schema_version: 1, capture: buildCaptureObservation(inspection, sourceScripts), observations: { chunks: { diff --git a/src/domain/webCaptureDiff.ts b/src/domain/webCaptureDiff.ts index 52d17bd1da..ac71b2c2f8 100644 --- a/src/domain/webCaptureDiff.ts +++ b/src/domain/webCaptureDiff.ts @@ -32,7 +32,6 @@ export const compareWebCaptures = ( const dimensions = compareWebCaptureDimensions(input, remaining); const statuses = Object.values(dimensions).map(({ status }) => status); return webCaptureDiffSchema.parse({ - schema_version: 1, overall_status: statuses.includes("changed") ? "changed" : statuses.includes("unknown") diff --git a/src/domain/webCaptureDiffSchemas.ts b/src/domain/webCaptureDiffSchemas.ts index 5703ae01b9..f233ac73a4 100644 --- a/src/domain/webCaptureDiffSchemas.ts +++ b/src/domain/webCaptureDiffSchemas.ts @@ -67,7 +67,6 @@ const legacyUnknownDimension: z.input = { /** Completeness-aware changes across stable browser evidence dimensions. */ export const webCaptureDiffSchema = z .object({ - schema_version: z.literal(1), overall_status: z.enum(["changed", "unchanged", "unknown"]), before_target: z.object({ target_id: z.string(), url: z.string() }), after_target: z.object({ target_id: z.string(), url: z.string() }), diff --git a/src/domain/webMcpDiscovery.ts b/src/domain/webMcpDiscovery.ts index ad3a4bde04..fb15fda64d 100644 --- a/src/domain/webMcpDiscovery.ts +++ b/src/domain/webMcpDiscovery.ts @@ -62,7 +62,6 @@ const webMcpToolSchema = z.object({ /** Passive WebMCP inventory; it intentionally has no invocation surface. */ export const webMcpDiscoverySchema = z.object({ - schema_version: z.literal(1), browser: browserVersionSchema, target: z.object({ target_id: z.string(), diff --git a/src/domain/webScreenshot.ts b/src/domain/webScreenshot.ts index 28e7818f56..dc9806202a 100644 --- a/src/domain/webScreenshot.ts +++ b/src/domain/webScreenshot.ts @@ -66,7 +66,6 @@ const browserVersionSchema = z.object({ /** Bounded screenshot observation with embedded immutable artifact bytes. */ export const webScreenshotSchema = z.object({ - schema_version: z.literal(1), browser: browserVersionSchema, target: z.object({ target_id: z.string(), @@ -97,7 +96,6 @@ export type CompareWebScreenshotsInput = z.infer< /** Value-only visual difference metrics; no OCR or image mutation. */ const webScreenshotDiffContextShape = { - schema_version: z.literal(1), before: z.object({ width: z.number().int().min(1), height: z.number().int().min(1), diff --git a/src/dotnet/ManagedArtifactInspector.test.ts b/src/dotnet/ManagedArtifactInspector.test.ts index 4d078cdcb6..cfcc732ec5 100644 --- a/src/dotnet/ManagedArtifactInspector.test.ts +++ b/src/dotnet/ManagedArtifactInspector.test.ts @@ -44,13 +44,10 @@ describe("managed artifact inventory", () => { token: "0x20000001", }); expect(result.target_frameworks).toEqual([".NETCoreApp,Version=v8.0"]); - expect(result.references).toMatchObject({ - total: 1, - returned: 1, - complete: true, - items: [expect.objectContaining({ name: "System.Runtime" })], - }); - expect(result.resources.items).toEqual([ + expect(result.references).toEqual([ + expect.objectContaining({ name: "System.Runtime" }), + ]); + expect(result.resources).toEqual([ expect.objectContaining({ name: "Fixture.resources", embedded: true, @@ -62,26 +59,19 @@ describe("managed artifact inventory", () => { expect(result.coverage).toMatchObject({ state: "complete", issues: [] }); }); - it("keeps classification evidence complete when caller pages visible references", () => { + it("returns all references inline while classifying from the full inventory", () => { const bytes = buildManagedPeFixture({ references: ["System.Runtime", "UnityEngine.CoreModule"], }); const result = inspectManagedArtifactBytes( bytes, managedPeFixtureTarget(bytes), - { - ...MANAGED_ARTIFACT_FIXTURE_LIMITS, - referenceLimit: 1, - }, + MANAGED_ARTIFACT_FIXTURE_LIMITS, ); expect(result.classification.runtime_family).toBe("unity-mono"); - expect(result.references).toMatchObject({ - total: 2, - returned: 1, - complete: false, - }); - expect(result.coverage.state).toBe("partial"); + expect(result.references).toHaveLength(2); + expect(result.coverage.state).toBe("complete"); expect(result.coverage.issues).toEqual([]); }); @@ -124,11 +114,11 @@ describe("managed artifact inventory", () => { MANAGED_MEMBER_FIXTURE_LIMITS, ); - expect(result.fields.items[0]?.signature).toMatchObject({ + expect(result.fields[0]?.signature).toMatchObject({ parse_status: "decoded", field_type: "i4**[]", }); - expect(result.methods.items[0]?.signature).toMatchObject({ + expect(result.methods[0]?.signature).toMatchObject({ parse_status: "decoded", return_type: "i4&", parameter_types: ["i4*", "string&"], diff --git a/src/dotnet/ManagedArtifactInspector.ts b/src/dotnet/ManagedArtifactInspector.ts index b0c74a8ab6..538a1b60ea 100644 --- a/src/dotnet/ManagedArtifactInspector.ts +++ b/src/dotnet/ManagedArtifactInspector.ts @@ -27,16 +27,6 @@ export interface ManagedInspectionLimits extends ManagedInventoryInput { readonly maxTableRows: number; } -const emptyPage = (offset: number, limit: number) => ({ - items: [], - offset, - limit, - total: 0, - returned: 0, - dropped: 0, - complete: offset === 0, -}); - const flagNames = (flags: number): string[] => { const names: string[] = []; for (const [mask, name] of [ @@ -100,7 +90,6 @@ const base = ( bytes: Buffer, layout: ManagedPeLayout, ) => ({ - schema_version: 1 as const, artifact: { path: target.path, sha256: target.sha256, @@ -114,7 +103,6 @@ const unavailableResult = ( target: BinaryTarget, bytes: Buffer, layout: ManagedPeLayout, - limits: ManagedInspectionLimits, ): ManagedArtifactInspection => { const malformed = layout.cliDirectoryPresent; const issues = layout.cliIssue === null ? [] : [layout.cliIssue]; @@ -150,9 +138,9 @@ const unavailableResult = ( module: null, assembly: null, target_frameworks: [], - references: emptyPage(limits.referenceOffset, limits.referenceLimit), - resources: emptyPage(limits.resourceOffset, limits.resourceLimit), - attributes: emptyPage(limits.attributeOffset, limits.attributeLimit), + references: [], + resources: [], + attributes: [], coverage: { state: malformed ? "partial" : "unavailable", issues, @@ -295,7 +283,6 @@ interface PartialMetadataContext { readonly target: BinaryTarget; readonly bytes: Buffer; readonly layout: ManagedPeLayout; - readonly limits: ManagedInspectionLimits; readonly issue: ManagedParseIssue; } @@ -303,7 +290,6 @@ const partialMetadataResult = ({ target, bytes, layout, - limits, issue, }: PartialMetadataContext): ManagedArtifactInspection => ({ ...base(target, bytes, layout), @@ -331,9 +317,9 @@ const partialMetadataResult = ({ module: null, assembly: null, target_frameworks: [], - references: emptyPage(limits.referenceOffset, limits.referenceLimit), - resources: emptyPage(limits.resourceOffset, limits.resourceLimit), - attributes: emptyPage(limits.attributeOffset, limits.attributeLimit), + references: [], + resources: [], + attributes: [], coverage: { state: "partial", issues: [issue] }, limitations: [ "CLI metadata triage stopped at the reported bounded format or resource limit.", @@ -364,13 +350,6 @@ const mapResources = ( } }; -const inventoryPagesComplete = ( - inventory: ReturnType, -): boolean => - inventory.references.complete && - inventory.resources.complete && - inventory.attributes.complete; - /** Inspect PE/CLI identity directly from bounded bytes without CLR loading. */ export const inspectManagedArtifactBytes = ( bytes: Buffer, @@ -378,8 +357,7 @@ export const inspectManagedArtifactBytes = ( limits: ManagedInspectionLimits, ): ManagedArtifactInspection => { const layout = readManagedPeLayout(bytes); - if (layout.cli === null) - return unavailableResult(target, bytes, layout, limits); + if (layout.cli === null) return unavailableResult(target, bytes, layout); const cli = layout.cli; if (cli.metadata.size > limits.maxMetadataBytes) return managedArtifactInspectionSchema.parse( @@ -387,7 +365,6 @@ export const inspectManagedArtifactBytes = ( target, bytes, layout, - limits, issue: { code: "limit-exceeded", scope: "cli.metadata", @@ -416,7 +393,6 @@ export const inspectManagedArtifactBytes = ( target, bytes, layout, - limits, issue: cause.issue, }), ); @@ -430,13 +406,7 @@ export const inspectManagedArtifactBytes = ( resourceDirectory, ); const issues = [...resourceIssues, ...inventory.issues]; - const pagesComplete = inventoryPagesComplete(inventory); const limitations = [ - ...(pagesComplete - ? [] - : [ - "At least one caller-selected metadata page omits rows; use its offset and total to continue.", - ]), ...(issues.length === 0 ? [] : [ @@ -464,7 +434,7 @@ export const inspectManagedArtifactBytes = ( resources: inventory.resources, attributes: inventory.attributes, coverage: { - state: pagesComplete && issues.length === 0 ? "complete" : "partial", + state: issues.length === 0 ? "complete" : "partial", issues, }, limitations, diff --git a/src/dotnet/ManagedCilDecoding.test.ts b/src/dotnet/ManagedCilDecoding.test.ts index d61f20b777..74a8eb4f7b 100644 --- a/src/dotnet/ManagedCilDecoding.test.ts +++ b/src/dotnet/ManagedCilDecoding.test.ts @@ -29,7 +29,7 @@ describe("managed CIL decoding", () => { MANAGED_MEMBER_FIXTURE_LIMITS, ); - expect(result.methods.items[0]?.body).toMatchObject({ + expect(result.methods[0]?.body).toMatchObject({ status: "present", header_format: "fat", il_size: il.length, @@ -56,7 +56,7 @@ describe("managed CIL decoding", () => { MANAGED_MEMBER_FIXTURE_LIMITS, ); - expect(result.methods.items[0]?.body).toMatchObject({ + expect(result.methods[0]?.body).toMatchObject({ status: "malformed", il_size: 2, normalized_il_sha256: null, @@ -89,7 +89,7 @@ describe("managed CIL decoding", () => { MANAGED_MEMBER_FIXTURE_LIMITS, ); - expect(tiny.methods.items[0]?.body).toMatchObject({ + expect(tiny.methods[0]?.body).toMatchObject({ status: "present", header_format: "tiny", max_stack: 8, @@ -102,13 +102,13 @@ describe("managed CIL decoding", () => { opcode_counts: { nop: 1, ret: 1 }, exception_regions: [], }); - expect(fat.methods.items[0]?.body).toMatchObject({ + expect(fat.methods[0]?.body).toMatchObject({ header_format: "fat", max_stack: 32, init_locals: true, local_var_sig_token: "0x11000001", - il_sha256: tiny.methods.items[0]?.body.il_sha256, - normalized_il_sha256: tiny.methods.items[0]?.body.normalized_il_sha256, + il_sha256: tiny.methods[0]?.body.il_sha256, + normalized_il_sha256: tiny.methods[0]?.body.normalized_il_sha256, }); }); }); diff --git a/src/dotnet/ManagedCilLimits.test.ts b/src/dotnet/ManagedCilLimits.test.ts index 577ee0d839..8e0aa0b497 100644 --- a/src/dotnet/ManagedCilLimits.test.ts +++ b/src/dotnet/ManagedCilLimits.test.ts @@ -23,7 +23,7 @@ describe("managed CIL limits", () => { const il = bytes.subarray(0x0a01, 0x0a0d); expect(result.metadata.status).toBe("complete"); - expect(result.methods.items[0]?.body).toMatchObject({ + expect(result.methods[0]?.body).toMatchObject({ status: "partial", il_size: 12, il_sha256: createHash("sha256").update(il).digest("hex"), diff --git a/src/dotnet/ManagedInspectionDefaults.ts b/src/dotnet/ManagedInspectionDefaults.ts new file mode 100644 index 0000000000..2aa236eb9e --- /dev/null +++ b/src/dotnet/ManagedInspectionDefaults.ts @@ -0,0 +1,9 @@ +/** Internal parser and artifact-admission safeguards for managed PE inspection. */ +export const MANAGED_INSPECTION_DEFAULTS = Object.freeze({ + maxFileBytes: 268_435_456, + maxMetadataBytes: 67_108_864, + maxTableRows: 100_000, + maxHeapItemBytes: 1_048_576, + maxMethodBodyBytes: 1_048_576, + maxMethodInstructions: 10_000, +}); diff --git a/src/dotnet/ManagedMemberInspector.test.ts b/src/dotnet/ManagedMemberInspector.test.ts index 64c134233f..b811ddf7db 100644 --- a/src/dotnet/ManagedMemberInspector.test.ts +++ b/src/dotnet/ManagedMemberInspector.test.ts @@ -21,7 +21,7 @@ describe("managed member inspection", () => { requires_artifact_sha256: managedPeFixtureTarget(bytes).sha256, requires_mvid: "00112233-4455-6677-8899-aabbccddeeff", }); - expect(result.types.items).toEqual([ + expect(result.types).toEqual([ expect.objectContaining({ token: "0x02000001", full_name: "Fixture.Program", @@ -29,7 +29,7 @@ describe("managed member inspection", () => { method_list: { first_row: 1, last_row: 1, count: 1 }, }), ]); - expect(result.fields.items).toEqual([ + expect(result.fields).toEqual([ expect.objectContaining({ token: "0x04000001", declaring_type: "Fixture.Program", @@ -41,7 +41,7 @@ describe("managed member inspection", () => { }), }), ]); - expect(result.methods.items).toEqual([ + expect(result.methods).toEqual([ expect.objectContaining({ token: "0x06000001", declaring_type: "Fixture.Program", @@ -79,7 +79,7 @@ describe("managed member inspection", () => { }), }), ]); - expect(result.member_refs.items).toEqual([ + expect(result.member_refs).toEqual([ expect.objectContaining({ token: "0x0a000001", name: ".ctor", @@ -90,7 +90,7 @@ describe("managed member inspection", () => { }), }), ]); - expect(result.call_edges.items).toEqual([ + expect(result.call_edges).toEqual([ { caller_token: "0x06000001", caller: "Fixture.Program.Main", @@ -100,7 +100,7 @@ describe("managed member inspection", () => { target_name: ".ctor", }, ]); - expect(result.field_accesses.items).toEqual([ + expect(result.field_accesses).toEqual([ { method_token: "0x06000001", method: "Fixture.Program.Main", diff --git a/src/dotnet/ManagedMemberInspector.ts b/src/dotnet/ManagedMemberInspector.ts index 42586c0ed7..a7aa58b2a1 100644 --- a/src/dotnet/ManagedMemberInspector.ts +++ b/src/dotnet/ManagedMemberInspector.ts @@ -19,8 +19,6 @@ import { managedFailure, } from "./ManagedReaderFailure.js"; import { - emptyPage, - page, parseTypes, typeRanges, type ManagedMemberInspectionLimits, @@ -41,7 +39,6 @@ const unavailable = ( issue: ManagedParseIssue | null, ): ManagedMemberInspection => managedMemberInspectionSchema.parse({ - schema_version: 1, artifact: { path: target.path, sha256: target.sha256, @@ -59,12 +56,12 @@ const unavailable = ( requires_artifact_sha256: target.sha256, requires_mvid: null, }, - types: emptyPage(limits.typeOffset, limits.typeLimit), - fields: emptyPage(limits.fieldOffset, limits.fieldLimit), - methods: emptyPage(limits.methodOffset, limits.methodLimit), - member_refs: emptyPage(limits.memberRefOffset, limits.memberRefLimit), - call_edges: emptyPage(limits.edgeOffset, limits.edgeLimit), - field_accesses: emptyPage(limits.edgeOffset, limits.edgeLimit), + types: [], + fields: [], + methods: [], + member_refs: [], + call_edges: [], + field_accesses: [], coverage: { state: "unavailable", issues: issue === null ? [] : [issue], @@ -144,12 +141,6 @@ const readMemberInventory = ( bytes, layout, { - referenceOffset: 0, - referenceLimit: 1, - resourceOffset: 0, - resourceLimit: 1, - attributeOffset: 0, - attributeLimit: 1, maxHeapItemBytes: limits.maxHeapItemBytes, }, resourceDirectory(pe), @@ -190,7 +181,6 @@ export const inspectManagedMembersBytes = ( memberRefs.core, ); return managedMemberInspectionSchema.parse({ - schema_version: 1, artifact: { path: target.path, sha256: target.sha256, @@ -208,20 +198,12 @@ export const inspectManagedMembersBytes = ( requires_artifact_sha256: target.sha256, requires_mvid: inventory.module?.mvid ?? null, }, - types: page(types, limits.typeOffset, limits.typeLimit), - fields: page(fields.fields, limits.fieldOffset, limits.fieldLimit), - methods: page(methods.methods, limits.methodOffset, limits.methodLimit), - member_refs: page( - memberRefs.refs, - limits.memberRefOffset, - limits.memberRefLimit, - ), - call_edges: page(related.callEdges, limits.edgeOffset, limits.edgeLimit), - field_accesses: page( - related.fieldAccesses, - limits.edgeOffset, - limits.edgeLimit, - ), + types, + fields: fields.fields, + methods: methods.methods, + member_refs: memberRefs.refs, + call_edges: related.callEdges, + field_accesses: related.fieldAccesses, coverage: { state: coverageIssues.length === 0 ? "complete" : "partial", issues: coverageIssues, diff --git a/src/dotnet/ManagedMemberInspectorCore.ts b/src/dotnet/ManagedMemberInspectorCore.ts index a66fbd827c..83a4d683d4 100644 --- a/src/dotnet/ManagedMemberInspectorCore.ts +++ b/src/dotnet/ManagedMemberInspectorCore.ts @@ -11,24 +11,13 @@ import { sha256Bytes, } from "./ManagedMetadataHeaps.js"; -export type ManagedPage = { - readonly items: readonly Item[]; - readonly offset: number; - readonly limit: number; - readonly total: number; - readonly returned: number; - readonly dropped: number; - readonly complete: boolean; -}; -export type ManagedType = ManagedMemberInspection["types"]["items"][number]; -export type ManagedField = ManagedMemberInspection["fields"]["items"][number]; -export type ManagedMethod = ManagedMemberInspection["methods"]["items"][number]; -export type ManagedMemberRef = - ManagedMemberInspection["member_refs"]["items"][number]; -export type ManagedCallEdge = - ManagedMemberInspection["call_edges"]["items"][number]; +export type ManagedType = ManagedMemberInspection["types"][number]; +export type ManagedField = ManagedMemberInspection["fields"][number]; +export type ManagedMethod = ManagedMemberInspection["methods"][number]; +export type ManagedMemberRef = ManagedMemberInspection["member_refs"][number]; +export type ManagedCallEdge = ManagedMemberInspection["call_edges"][number]; export type ManagedFieldAccess = - ManagedMemberInspection["field_accesses"]["items"][number]; + ManagedMemberInspection["field_accesses"][number]; export type ManagedSignature = ManagedMethod["signature"]; export type ManagedMethodBody = ManagedMethod["body"]; export type ManagedInstructionAnchor = ManagedMethodBody["anchors"][number]; @@ -36,17 +25,6 @@ export type ManagedExceptionRegion = ManagedMethodBody["exception_regions"][number]; export interface ManagedMemberInspectionLimits { - readonly typeOffset: number; - readonly typeLimit: number; - readonly methodOffset: number; - readonly methodLimit: number; - readonly fieldOffset: number; - readonly fieldLimit: number; - readonly memberRefOffset: number; - readonly memberRefLimit: number; - readonly edgeOffset: number; - readonly edgeLimit: number; - readonly instructionAnchorLimit: number; readonly maxMetadataBytes: number; readonly maxTableRows: number; readonly maxHeapItemBytes: number; @@ -86,36 +64,6 @@ export interface ParsedInstruction { readonly operand: string | null; } -export const emptyPage = ( - offset: number, - limit: number, -): ManagedPage => ({ - items: [], - offset, - limit, - total: 0, - returned: 0, - dropped: 0, - complete: offset === 0, -}); - -export const page = ( - all: readonly Item[], - offset: number, - limit: number, -): ManagedPage => { - const items = all.slice(offset, offset + limit); - return { - items, - offset, - limit, - total: all.length, - returned: items.length, - dropped: all.length - items.length, - complete: offset === 0 && offset + limit >= all.length, - }; -}; - const rowRange = ( table: MetadataTableLayout | undefined, start: number, diff --git a/src/dotnet/ManagedMetadataInventory.ts b/src/dotnet/ManagedMetadataInventory.ts index 46819b0e87..bf94107003 100644 --- a/src/dotnet/ManagedMetadataInventory.ts +++ b/src/dotnet/ManagedMetadataInventory.ts @@ -19,27 +19,10 @@ import { ManagedReaderFailure } from "./ManagedReaderFailure.js"; type ModuleIdentity = NonNullable; type AssemblyIdentity = NonNullable; -type AssemblyReference = - ManagedArtifactInspection["references"]["items"][number]; -type ManagedResource = ManagedArtifactInspection["resources"]["items"][number]; -type CustomAttribute = ManagedArtifactInspection["attributes"]["items"][number]; -type ManagedPage = { - readonly items: readonly Item[]; - readonly offset: number; - readonly limit: number; - readonly total: number; - readonly returned: number; - readonly dropped: number; - readonly complete: boolean; -}; - +type AssemblyReference = ManagedArtifactInspection["references"][number]; +type ManagedResource = ManagedArtifactInspection["resources"][number]; +type CustomAttribute = ManagedArtifactInspection["attributes"][number]; export interface ManagedInventoryInput { - readonly referenceOffset: number; - readonly referenceLimit: number; - readonly resourceOffset: number; - readonly resourceLimit: number; - readonly attributeOffset: number; - readonly attributeLimit: number; readonly maxHeapItemBytes: number; } @@ -53,9 +36,9 @@ export interface ManagedMetadataInventory { readonly assembly: AssemblyIdentity | null; readonly targetFrameworks: readonly string[]; readonly referenceNames: readonly string[]; - readonly references: ManagedPage; - readonly resources: ManagedPage; - readonly attributes: ManagedPage; + readonly references: readonly AssemblyReference[]; + readonly resources: readonly ManagedResource[]; + readonly attributes: readonly CustomAttribute[]; readonly issues: readonly ManagedParseIssue[]; } @@ -72,28 +55,17 @@ const safeRead = ( } }; -const pageRows = ( +const readRows = ( descriptor: MetadataTableLayout | undefined, - offset: number, - limit: number, read: (row: number) => Item | undefined, -): ManagedPage => { +): readonly Item[] => { const total = descriptor?.rowCount ?? 0; const items: Item[] = []; - const end = Math.min(total, offset + limit); - for (let index = offset; index < end; index += 1) { + for (let index = 0; index < total; index += 1) { const item = read(index + 1); if (item !== undefined) items.push(item); } - return { - items, - offset, - limit, - total, - returned: items.length, - dropped: total - items.length, - complete: offset === 0 && end === total && items.length === total, - }; + return items; }; const uniqueIssues = ( @@ -102,24 +74,20 @@ const uniqueIssues = ( ...new Map(issues.map((issue) => [JSON.stringify(issue), issue])).values(), ]; -const readPagedReferences = ( +const readReferences = ( bytes: Buffer, layout: ManagedMetadataLayout, input: ManagedInventoryInput, issues: ManagedParseIssue[], -): ManagedPage => - pageRows( - layout.table(35), - input.referenceOffset, - input.referenceLimit, - (row) => - safeRead( - () => readAssemblyReference(bytes, layout, row, input.maxHeapItemBytes), - issues, - ), +): readonly AssemblyReference[] => + readRows(layout.table(35), (row) => + safeRead( + () => readAssemblyReference(bytes, layout, row, input.maxHeapItemBytes), + issues, + ), ); -const readPagedResources = ({ +const readResources = ({ bytes, layout, input, @@ -131,8 +99,8 @@ const readPagedResources = ({ readonly input: ManagedInventoryInput; readonly resourceDirectory: ManagedResourceDirectory | null; readonly issues: ManagedParseIssue[]; -}): ManagedPage => - pageRows(layout.table(40), input.resourceOffset, input.resourceLimit, (row) => +}): readonly ManagedResource[] => + readRows(layout.table(40), (row) => safeRead( () => readResource({ @@ -147,21 +115,17 @@ const readPagedResources = ({ ), ); -const readPagedAttributes = ( +const readAttributes = ( bytes: Buffer, layout: ManagedMetadataLayout, input: ManagedInventoryInput, issues: ManagedParseIssue[], -): ManagedPage => - pageRows( - layout.table(12), - input.attributeOffset, - input.attributeLimit, - (row) => - safeRead( - () => readCustomAttribute(bytes, layout, row, input.maxHeapItemBytes), - issues, - ), +): readonly CustomAttribute[] => + readRows(layout.table(12), (row) => + safeRead( + () => readCustomAttribute(bytes, layout, row, input.maxHeapItemBytes), + issues, + ), ); const collectReferenceNames = ( @@ -223,15 +187,15 @@ export const readManagedMetadataInventory = ( () => readAssembly(bytes, layout, input.maxHeapItemBytes), issues, ) ?? null; - const references = readPagedReferences(bytes, layout, input, issues); - const resources = readPagedResources({ + const references = readReferences(bytes, layout, input, issues); + const resources = readResources({ bytes, layout, input, resourceDirectory, issues, }); - const attributes = readPagedAttributes(bytes, layout, input, issues); + const attributes = readAttributes(bytes, layout, input, issues); const referenceNames = collectReferenceNames( bytes, layout, diff --git a/src/dotnet/ManagedMetadataInventoryRows.ts b/src/dotnet/ManagedMetadataInventoryRows.ts index 38f77e5ab9..d06a296fc4 100644 --- a/src/dotnet/ManagedMetadataInventoryRows.ts +++ b/src/dotnet/ManagedMetadataInventoryRows.ts @@ -21,10 +21,9 @@ import type { ManagedResourceDirectory } from "./ManagedMetadataInventory.js"; type ModuleIdentity = NonNullable; type AssemblyIdentity = NonNullable; -type AssemblyReference = - ManagedArtifactInspection["references"]["items"][number]; -type ManagedResource = ManagedArtifactInspection["resources"]["items"][number]; -type CustomAttribute = ManagedArtifactInspection["attributes"]["items"][number]; +type AssemblyReference = ManagedArtifactInspection["references"][number]; +type ManagedResource = ManagedArtifactInspection["resources"][number]; +type CustomAttribute = ManagedArtifactInspection["attributes"][number]; const publicKeyIdentity = ( bytes: Buffer, diff --git a/src/dotnet/ManagedMethodBodyReader.ts b/src/dotnet/ManagedMethodBodyReader.ts index a117e51b39..91495a2402 100644 --- a/src/dotnet/ManagedMethodBodyReader.ts +++ b/src/dotnet/ManagedMethodBodyReader.ts @@ -74,10 +74,8 @@ export const methodBody = ( opcodeCounts[instruction.opcode] = (opcodeCounts[instruction.opcode] ?? 0) + 1; const anchors = decoded.parsed - .map((instruction, index) => ({ instruction, index })) - .filter(({ instruction }) => instruction.operandKind !== "none") - .slice(0, limits.instructionAnchorLimit) - .map(({ instruction }) => ({ + .filter((instruction) => instruction.operandKind !== "none") + .map((instruction) => ({ il_offset: instruction.offset, opcode: instruction.opcode, operand_kind: instruction.operandKind, diff --git a/src/dotnet/ManagedNativeBoundaryHelpers.ts b/src/dotnet/ManagedNativeBoundaryHelpers.ts index 5dc2917cf4..57f796c717 100644 --- a/src/dotnet/ManagedNativeBoundaryHelpers.ts +++ b/src/dotnet/ManagedNativeBoundaryHelpers.ts @@ -13,25 +13,12 @@ import { } from "./ManagedMetadataHeaps.js"; import { managedTableRowCounts } from "./ManagedMetadataInventory.js"; import type { ManagedMetadataInventory } from "./ManagedMetadataInventory.js"; -import type { ManagedNativeBoundaryInspectionLimits } from "./ManagedNativeBoundaryInspector.js"; import type { ManagedPeLayout } from "./ManagedPeReader.js"; -type Page = { - readonly items: readonly Item[]; - readonly offset: number; - readonly limit: number; - readonly total: number; - readonly returned: number; - readonly dropped: number; - readonly complete: boolean; -}; - -type ModuleRef = - ManagedNativeBoundaryInspection["module_refs"]["items"][number]; -type NativeImport = - ManagedNativeBoundaryInspection["pinvoke_imports"]["items"][number]; +type ModuleRef = ManagedNativeBoundaryInspection["module_refs"][number]; +type NativeImport = ManagedNativeBoundaryInspection["pinvoke_imports"][number]; type NativeImplementation = - ManagedNativeBoundaryInspection["native_implementations"]["items"][number]; + ManagedNativeBoundaryInspection["native_implementations"][number]; interface MemberCore { readonly token: string; @@ -46,24 +33,6 @@ interface MemberCore { const flagsHex = (value: number): string => `0x${value.toString(16).padStart(4, "0")}`; -const page = ( - items: readonly Item[], - offset: number, - limit: number, -): Page => { - const safeOffset = Math.min(offset, items.length); - const selected = items.slice(safeOffset, safeOffset + limit); - return { - items: selected, - offset, - limit, - total: items.length, - returned: selected.length, - dropped: Math.max(0, items.length - safeOffset - selected.length), - complete: safeOffset === 0 && selected.length === items.length, - }; -}; - export const parseModuleRefs = ( bytes: Buffer, layout: ManagedMetadataLayout, @@ -378,7 +347,6 @@ export const cliNative = ( interface BoundaryInspectionContext { readonly target: BinaryTarget; readonly bytes: Buffer; - readonly limits: ManagedNativeBoundaryInspectionLimits; readonly pe: ManagedPeLayout; readonly layout: ManagedMetadataLayout; readonly inventory: ManagedMetadataInventory; @@ -392,7 +360,6 @@ interface BoundaryInspectionContext { export const buildNativeBoundaryInspection = ({ target, bytes, - limits, layout, inventory, moduleRefs, @@ -421,17 +388,9 @@ export const buildNativeBoundaryInspection = ({ requires_mvid: inventory.module?.mvid ?? null, }, cli_native: native, - module_refs: page( - moduleRefs, - limits.moduleRefOffset, - limits.moduleRefLimit, - ), - pinvoke_imports: page(imports, limits.importOffset, limits.importLimit), - native_implementations: page( - implementations, - limits.implementationOffset, - limits.implementationLimit, - ), + module_refs: moduleRefs, + pinvoke_imports: imports, + native_implementations: implementations, summary: { module_ref_count: moduleRefs.length, pinvoke_import_count: imports.length, diff --git a/src/dotnet/ManagedNativeBoundaryInspector.test.ts b/src/dotnet/ManagedNativeBoundaryInspector.test.ts index b84b7f47ab..5b91d17253 100644 --- a/src/dotnet/ManagedNativeBoundaryInspector.test.ts +++ b/src/dotnet/ManagedNativeBoundaryInspector.test.ts @@ -32,14 +32,14 @@ describe("managed native boundaries", () => { managed_native_header_rva: 0x2700, managed_native_header_size: 4, }); - expect(result.module_refs.items).toEqual([ + expect(result.module_refs).toEqual([ { token: "0x1a000001", row_offset: expect.any(Number), name: "user32.dll", }, ]); - expect(result.pinvoke_imports.items).toEqual([ + expect(result.pinvoke_imports).toEqual([ expect.objectContaining({ token: "0x1c000001", member_token: "0x06000001", @@ -55,7 +55,7 @@ describe("managed native boundaries", () => { verification: "managed-declaration-only", }), ]); - expect(result.native_implementations.items).toEqual([ + expect(result.native_implementations).toEqual([ expect.objectContaining({ token: "0x06000001", name: "Main", @@ -76,23 +76,14 @@ describe("managed native boundaries", () => { ); }); - it("keeps member evidence bounded and typed for pagination and unavailable metadata", () => { + it("returns complete member inventories inline and reports unavailable metadata", () => { const bytes = buildManagedPeFixture(); const paged = inspectManagedMembersBytes( bytes, managedPeFixtureTarget(bytes), - { - ...MANAGED_MEMBER_FIXTURE_LIMITS, - methodLimit: 0 + 1, - instructionAnchorLimit: 1, - }, + MANAGED_MEMBER_FIXTURE_LIMITS, ); - expect(paged.methods).toMatchObject({ - total: 1, - returned: 1, - complete: true, - }); - expect(paged.methods.items[0]?.body.anchors).toHaveLength(1); + expect(paged.methods).toHaveLength(1); const nativeBytes = buildNativePeFixture(); const native = inspectManagedMembersBytes( diff --git a/src/dotnet/ManagedNativeBoundaryInspector.ts b/src/dotnet/ManagedNativeBoundaryInspector.ts index 180ab9a40e..39fe71d032 100644 --- a/src/dotnet/ManagedNativeBoundaryInspector.ts +++ b/src/dotnet/ManagedNativeBoundaryInspector.ts @@ -28,12 +28,6 @@ import { } from "./ManagedNativeBoundaryHelpers.js"; export interface ManagedNativeBoundaryInspectionLimits { - readonly moduleRefOffset: number; - readonly moduleRefLimit: number; - readonly importOffset: number; - readonly importLimit: number; - readonly implementationOffset: number; - readonly implementationLimit: number; readonly maxMetadataBytes: number; readonly maxTableRows: number; readonly maxHeapItemBytes: number; @@ -41,18 +35,6 @@ export interface ManagedNativeBoundaryInspectionLimits { type Inventory = ReturnType; -const emptyPage = (): ManagedNativeBoundaryInspection["module_refs"] & { - items: readonly Item[]; -} => ({ - items: [], - offset: 0, - limit: 0, - total: 0, - returned: 0, - dropped: 0, - complete: true, -}); - const emptyInspection = ( target: BinaryTarget, bytes: Buffer, @@ -60,7 +42,6 @@ const emptyInspection = ( issues: readonly ManagedParseIssue[] = [], ): ManagedNativeBoundaryInspection => managedNativeBoundaryInspectionSchema.parse({ - schema_version: 1, artifact: { path: target.path, sha256: target.sha256, @@ -90,9 +71,9 @@ const emptyInspection = ( managed_native_header_rva: 0, managed_native_header_size: 0, }, - module_refs: emptyPage(), - pinvoke_imports: emptyPage(), - native_implementations: emptyPage(), + module_refs: [], + pinvoke_imports: [], + native_implementations: [], summary: { module_ref_count: 0, pinvoke_import_count: 0, @@ -139,12 +120,6 @@ const readBoundaryInventory = ( bytes, layout, { - referenceOffset: 0, - referenceLimit: 0, - resourceOffset: 0, - resourceLimit: 0, - attributeOffset: 0, - attributeLimit: 0, maxHeapItemBytes: limits.maxHeapItemBytes, }, resourceDirectory, @@ -218,7 +193,6 @@ export const inspectManagedNativeBoundariesBytes = ( return buildNativeBoundaryInspection({ target, bytes, - limits, pe, layout, inventory, diff --git a/src/dotnet/ManagedPe.fixture.ts b/src/dotnet/ManagedPe.fixture.ts index a5f9725a65..90c7c24c95 100644 --- a/src/dotnet/ManagedPe.fixture.ts +++ b/src/dotnet/ManagedPe.fixture.ts @@ -75,12 +75,6 @@ const DEFAULT_MVID = Buffer.from([ /** Generous bounds for inventory assertions over the source-owned PE fixture. */ export const MANAGED_ARTIFACT_FIXTURE_LIMITS = { - referenceOffset: 0, - referenceLimit: 100, - resourceOffset: 0, - resourceLimit: 100, - attributeOffset: 0, - attributeLimit: 100, maxMetadataBytes: 1024 * 1024, maxTableRows: 1_000, maxHeapItemBytes: 1024 * 1024, @@ -88,17 +82,6 @@ export const MANAGED_ARTIFACT_FIXTURE_LIMITS = { /** Generous bounds for member assertions over the source-owned PE fixture. */ export const MANAGED_MEMBER_FIXTURE_LIMITS = { - typeOffset: 0, - typeLimit: 100, - methodOffset: 0, - methodLimit: 100, - fieldOffset: 0, - fieldLimit: 100, - memberRefOffset: 0, - memberRefLimit: 100, - edgeOffset: 0, - edgeLimit: 100, - instructionAnchorLimit: 100, maxMetadataBytes: 1024 * 1024, maxTableRows: 1_000, maxHeapItemBytes: 1024 * 1024, @@ -114,12 +97,6 @@ export const MANAGED_MEMBER_PATH_FIXTURE_LIMITS = { /** Generous native-boundary bounds for the source-owned PE fixture. */ export const MANAGED_NATIVE_BOUNDARY_FIXTURE_LIMITS = { - moduleRefOffset: 0, - moduleRefLimit: 100, - importOffset: 0, - importLimit: 100, - implementationOffset: 0, - implementationLimit: 100, maxMetadataBytes: 1024 * 1024, maxTableRows: 1_000, maxHeapItemBytes: 1024 * 1024, diff --git a/src/dotnet/ManagedStaticProvider.ts b/src/dotnet/ManagedStaticProvider.ts index 9c2acb7168..6dcc671b21 100644 --- a/src/dotnet/ManagedStaticProvider.ts +++ b/src/dotnet/ManagedStaticProvider.ts @@ -37,6 +37,7 @@ import { err, ok } from "../domain/result.js"; import { inspectManagedArtifactBytes } from "./ManagedArtifactInspector.js"; import { inspectManagedMembersBytes } from "./ManagedMemberInspector.js"; import { inspectManagedNativeBoundariesBytes } from "./ManagedNativeBoundaryInspector.js"; +import { MANAGED_INSPECTION_DEFAULTS } from "./ManagedInspectionDefaults.js"; const IDENTITY: ProviderIdentity = Object.freeze(MANAGED_STATIC_PROVIDER); @@ -47,12 +48,10 @@ export class ManagedStaticProvider implements AnalysisProvider { Object.freeze({ provider: IDENTITY, operation: contract.name, - inputContractVersion: 1, - outputContractVersion: 1, available: true as const, reason: null, - pagination: "offset" as const, - exhaustive: false, + pagination: "none" as const, + exhaustive: true, effects: Object.freeze({ mutatesArtifact: false, launchesProcess: false, @@ -63,7 +62,7 @@ export class ManagedStaticProvider implements AnalysisProvider { requiresRoot: false, }), limits: Object.freeze({ - maxResults: 500, + maxResults: null, maxPayloadBytes: 4 * 1024 * 1024, timeoutMs: null, }), @@ -116,7 +115,7 @@ class ManagedStaticClient implements AnalysisClient { try { if (options?.signal?.aborted === true) return err(new AnalysisCancelledError(operation)); - const maxFileBytes = maxRequestedFileBytes(operation, parameters); + const maxFileBytes = MANAGED_INSPECTION_DEFAULTS.maxFileBytes; const metadata = await stat(this.target.path); if (metadata.size > maxFileBytes) return err( @@ -239,17 +238,6 @@ const limitationsFor = (operation: ManagedToolName): readonly string[] => ], ); -const maxRequestedFileBytes = ( - operation: ManagedToolName, - parameters: Readonly>, -): number => { - if (operation === "inspect_managed_artifact") - return managedArtifactInputSchema.parse(parameters).max_file_bytes; - if (operation === "inspect_managed_native_boundaries") - return managedNativeBoundaryInputSchema.parse(parameters).max_file_bytes; - return managedMemberInputSchema.parse(parameters).max_file_bytes; -}; - const inspectManagedOperation = ( operation: ManagedToolName, parameters: Readonly>, @@ -260,51 +248,28 @@ const inspectManagedOperation = ( | ManagedMemberInspection | ManagedNativeBoundaryInspection => { if (operation === "inspect_managed_artifact") { - const input = managedArtifactInputSchema.parse(parameters); + managedArtifactInputSchema.parse(parameters); return inspectManagedArtifactBytes(bytes, target, { - referenceOffset: input.reference_offset, - referenceLimit: input.reference_limit, - resourceOffset: input.resource_offset, - resourceLimit: input.resource_limit, - attributeOffset: input.attribute_offset, - attributeLimit: input.attribute_limit, - maxMetadataBytes: input.max_metadata_bytes, - maxTableRows: input.max_table_rows, - maxHeapItemBytes: input.max_heap_item_bytes, + maxMetadataBytes: MANAGED_INSPECTION_DEFAULTS.maxMetadataBytes, + maxTableRows: MANAGED_INSPECTION_DEFAULTS.maxTableRows, + maxHeapItemBytes: MANAGED_INSPECTION_DEFAULTS.maxHeapItemBytes, }); } if (operation === "inspect_managed_native_boundaries") { - const input = managedNativeBoundaryInputSchema.parse(parameters); + managedNativeBoundaryInputSchema.parse(parameters); return inspectManagedNativeBoundariesBytes(bytes, target, { - moduleRefOffset: input.module_ref_offset, - moduleRefLimit: input.module_ref_limit, - importOffset: input.import_offset, - importLimit: input.import_limit, - implementationOffset: input.implementation_offset, - implementationLimit: input.implementation_limit, - maxMetadataBytes: input.max_metadata_bytes, - maxTableRows: input.max_table_rows, - maxHeapItemBytes: input.max_heap_item_bytes, + maxMetadataBytes: MANAGED_INSPECTION_DEFAULTS.maxMetadataBytes, + maxTableRows: MANAGED_INSPECTION_DEFAULTS.maxTableRows, + maxHeapItemBytes: MANAGED_INSPECTION_DEFAULTS.maxHeapItemBytes, }); } - const input = managedMemberInputSchema.parse(parameters); + managedMemberInputSchema.parse(parameters); return inspectManagedMembersBytes(bytes, target, { - typeOffset: input.type_offset, - typeLimit: input.type_limit, - methodOffset: input.method_offset, - methodLimit: input.method_limit, - fieldOffset: input.field_offset, - fieldLimit: input.field_limit, - memberRefOffset: input.member_ref_offset, - memberRefLimit: input.member_ref_limit, - edgeOffset: input.edge_offset, - edgeLimit: input.edge_limit, - instructionAnchorLimit: input.instruction_anchor_limit, - maxMetadataBytes: input.max_metadata_bytes, - maxTableRows: input.max_table_rows, - maxHeapItemBytes: input.max_heap_item_bytes, - maxMethodBodyBytes: input.max_method_body_bytes, - maxMethodInstructions: input.max_method_instructions, + maxMetadataBytes: MANAGED_INSPECTION_DEFAULTS.maxMetadataBytes, + maxTableRows: MANAGED_INSPECTION_DEFAULTS.maxTableRows, + maxHeapItemBytes: MANAGED_INSPECTION_DEFAULTS.maxHeapItemBytes, + maxMethodBodyBytes: MANAGED_INSPECTION_DEFAULTS.maxMethodBodyBytes, + maxMethodInstructions: MANAGED_INSPECTION_DEFAULTS.maxMethodInstructions, }); }; @@ -335,7 +300,7 @@ const managedLocations = ( ...(result.module === null ? [{ kind: "file-offset" as const, offset: 0 }] : [{ kind: "file-offset" as const, offset: result.module.row_offset }]), - ...result.methods.items + ...result.methods .filter((method) => method.body.file_offset !== null) .slice(0, 8) .map((method) => ({ @@ -347,7 +312,7 @@ const managedLocations = ( ...(result.module === null ? [{ kind: "file-offset" as const, offset: 0 }] : [{ kind: "file-offset" as const, offset: result.module.row_offset }]), - ...result.pinvoke_imports.items.slice(0, 8).map((mapping) => ({ + ...result.pinvoke_imports.slice(0, 8).map((mapping) => ({ kind: "file-offset" as const, offset: mapping.row_offset, })), diff --git a/src/generatedMcpToolCatalog.ts b/src/generatedMcpToolCatalog.ts index ee5d42a218..9f7ad70efb 100644 --- a/src/generatedMcpToolCatalog.ts +++ b/src/generatedMcpToolCatalog.ts @@ -30,7 +30,7 @@ interface GeneratedPayload { } const GENERATED_PAYLOAD_JSON = - '{"auxiliaryProviders":[{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inventory_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inspect_artifact","outputContractVersion":1,"pagination":"none","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":true,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"extract_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null}],"identity":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_macho","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_signature","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_plist","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"list_architectures","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":30000},"operation":"demangle_swift","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null}],"identity":{"id":"native-macos","name":"macOS native inspection utilities","version":null}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability inventories PE/CLI identity only; inspect_managed_members admits bounded metadata members, signatures, and CIL anchors.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability decodes bounded PE/CLI metadata members, signatures, and file-backed method bodies; decompiled C# 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."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_members","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability inventories managed declarations for native boundaries only; native exports, thunks, and addresses require separate native-provider evidence.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_native_boundaries","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null}],"identity":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"}}],"catalog":[{"analysisOperation":"address_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve the primary analyzed name at a code or data address. Headless providers require an explicit address; GUI providers may default to their current cursor. Null means the provider has no primary name at that address.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"address_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Address Name"},{"analysisOperation":"comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read the regular analysis comment at an address, defaulting to the current cursor. This is read-only and returns null when no comment exists; use set_comment to persist a finding.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Comment"},{"analysisOperation":"current_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return Hopper\'s current cursor address for the selected document. Use only for interactive navigation state; prefer explicit addresses in reproducible investigations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Address"},{"analysisOperation":"current_procedure","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the analyzed procedure containing Hopper\'s current cursor. Use procedure_info or analyze_function next; this depends on GUI cursor state and is not an exhaustive lookup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_procedure","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Procedure"},{"analysisOperation":"current_document","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the document currently selected by REA\'s Hopper bridge. Use list_documents before switching when several documents are open.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_document","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Document"},{"analysisOperation":"goto_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Move Hopper\'s GUI cursor to a hexadecimal address and return the resolved address. This changes navigation state but not analysis data; use explicit-address tools for headless workflows.","effects":{"accessesNetwork":false,"changesUiState":true,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"goto_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Goto Address"},{"analysisOperation":"inline_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read the inline instruction comment at an address, defaulting to the current cursor. Returns null when absent; use set_inline_comment to write one.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"inline_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inline Comment"},{"analysisOperation":"list_bookmarks","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every bookmark in the selected Hopper document as address and name pairs. Use bookmarks as analyst-authored navigation aids; this does not discover code references.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_bookmarks","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Bookmarks"},{"analysisOperation":"list_documents","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List provider program or document identities. Hopper may expose several documents; a Ghidra headless session contains exactly its one imported Program.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_documents","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Documents"},{"analysisOperation":"list_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through analyzed memory and external symbols as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available; follow next_offset before claiming exhaustive coverage.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":100,"offset":0}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_names","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Names"},{"analysisOperation":"list_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through analyzed procedures as address/value pairs after provider analysis. Ghidra metadata distinguishes thunks and external functions; follow next_offset for exhaustive coverage and use returned addresses in later function operations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":100,"offset":0}],"properties":{"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_procedures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Procedures"},{"analysisOperation":"list_segments","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List segments or memory blocks using exclusive end addresses. Ghidra reports block permissions, address space, image base, initialization, and overlay facts; Hopper marks unavailable permissions explicitly.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_segments","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address_space":{"type":"string"},"end":{"type":"string"},"executable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"image_base":{"type":"string"},"initialized":{"type":"boolean"},"name":{"type":"string"},"overlay":{"type":"boolean"},"permissions":{"anyOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"source":{"const":"ghidra-memory-block","type":"string"}},"required":["available","source"],"type":"object"}]},"provenance":{"enum":["hopper-public-python-api","ghidra-memory-block"],"type":"string"},"readable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"sections":{"items":{"additionalProperties":false,"properties":{"address_space":{"type":"string"},"end":{"type":"string"},"executable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"image_base":{"type":"string"},"initialized":{"type":"boolean"},"name":{"type":"string"},"overlay":{"type":"boolean"},"permissions":{"anyOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"source":{"const":"ghidra-memory-block","type":"string"}},"required":["available","source"],"type":"object"}]},"provenance":{"enum":["hopper-public-python-api","ghidra-memory-block"],"type":"string"},"readable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"start":{"type":"string"},"writable":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","start","end","readable","writable","executable","permissions","provenance"],"type":"object"},"type":"array"},"start":{"type":"string"},"writable":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","start","end","readable","writable","executable","permissions","provenance","sections"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Segments"},{"analysisOperation":"list_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through provider-defined strings, or filter to one address, as address/value pairs. Ghidra reports charset, missing-terminator status, byte length, and explicit value truncation; follow next_offset for exhaustive results.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":100,"offset":0}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_strings","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Strings"},{"analysisOperation":"next_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the next analyzed object address after an explicit address or current cursor. This is a navigation primitive, not instruction-flow or CFG analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"next_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Next Address"},{"analysisOperation":"prev_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the previous analyzed instruction start before an explicit address or current cursor. This is a navigation primitive and may fail at document boundaries.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"prev_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Prev Address"},{"analysisOperation":"procedure_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an unambiguous procedure symbol name or provider-normalized address to its canonical entry address. External address spaces remain explicit; use the result before xrefs, assembly, or decompilation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Address"},{"analysisOperation":"procedure_assembly","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return assembly for one analyzed procedure identified by symbol or hexadecimal address. Use when pseudocode loses calling-convention or instruction-level detail; output is currently returned as one unpaginated string.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_assembly","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Assembly"},{"analysisOperation":"procedure_callees","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the provider\'s resolved direct callees for one procedure identified by symbol or address. Unresolved indirect calls may be absent; use analyze_function and typed references to preserve available edge uncertainty.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callees","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Callees"},{"analysisOperation":"procedure_callers","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the provider\'s resolved direct callers for one procedure identified by symbol or address. Results reflect completed static analysis and may omit unresolved indirect references.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callers","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Callers"},{"analysisOperation":"procedure_info","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return bounded metadata for one procedure identified by symbol or address: entrypoint, signature, locals, size, and block count. Follow with decompilation or assembly for behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_info","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"basicblock_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"entrypoint":{"type":"string"},"length":{"minimum":0,"type":"number"},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","entrypoint","basicblock_count","length","signature","locals","classification"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Info"},{"analysisOperation":"read_function_instructions","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read one offset-paginated window of raw instructions for an analyzed procedure without decompilation, caller discovery, or whole-program string/name scans. Use this fast path for instruction-level orientation; follow next_offset when truncated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":64,"offset":0,"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"limit":{"default":64,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":100000,"minimum":0,"type":"integer"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"read_function_instructions","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"instruction_scan_truncated":{"type":"boolean"},"instructions":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"instructions_scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"}},"required":["procedure","instructions","instructions_scanned","instruction_scan_truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Read Function Instructions"},{"analysisOperation":"read_bytes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read at most 4,096 analyzed bytes from one provider-normalized virtual address. The hexadecimal payload reports the exact returned length; incomplete reads remain explicit and unsupported provider APIs return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","length":16}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"length":{"default":256,"description":"Value for length.","maximum":4096,"minimum":1,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"read_bytes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"bytes_hex":{"pattern":"^(?:[a-f0-9]{2})*$","type":"string"},"complete":{"type":"boolean"},"requested_bytes":{"maximum":4096,"minimum":1,"type":"integer"},"returned_bytes":{"maximum":4096,"minimum":0,"type":"integer"}},"required":["address","requested_bytes","returned_bytes","bytes_hex","complete"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Read Bytes"},{"analysisOperation":"address_to_file_offset","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Map one provider-normalized virtual address to its original nonnegative file offset. Unmapped addresses fail explicitly, and providers without an authoritative mapping API return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"address_to_file_offset","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"file_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","file_offset"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Address To File Offset"},{"analysisOperation":"procedure_references","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return a bounded set of raw incoming or outgoing reference edges for one procedure. Endpoint procedures are resolved only from provider containment; Ghidra preserves observed reference kinds while providers without kind authority mark them unavailable.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"direction":"outgoing","limit":100,"max_instructions":500,"offset":0,"procedure":"main"}],"properties":{"direction":{"default":"outgoing","description":"Direction in which to traverse or compare relationships.","enum":["incoming","outgoing"],"type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_references","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"direction":{"enum":["incoming","outgoing"],"type":"string"},"instruction_scan_truncated":{"type":"boolean"},"instructions_scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"references":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]}},"required":["procedure","direction","references","instructions_scanned","instruction_scan_truncated"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure References"},{"analysisOperation":"procedure_pseudo_code","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile one analyzed procedure by symbol name or provider-normalized address. Returns provider-specific pseudocode, never original source or cross-provider text equivalence, and may return null; request procedure_assembly when instruction precision matters.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_pseudo_code","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Pseudo Code"},{"analysisOperation":"resolve_containing_procedure","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an arbitrary address, including an interior instruction or exact external entry, to its provider-analyzed containing procedure. A negative result distinguishes outside segments from not in a procedure and is never guessed from nearby symbols.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_containing_procedure","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Resolve Containing Procedure"},{"analysisOperation":"search_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search analyzed procedure names using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic and offset-paginated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"case_sensitive":false,"limit":100,"mode":"literal","offset":0,"pattern":"main"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"pattern":{"description":"The literal text or bounded regex pattern to search for","maxLength":256,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_procedures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value","value_truncated"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Search Procedures"},{"analysisOperation":"search_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search analyzed strings using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic, offset-paginated, and explicitly truncated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"case_sensitive":false,"limit":100,"mode":"literal","offset":0,"pattern":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"pattern":{"description":"The literal text or bounded regex pattern to search for","maxLength":256,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_strings","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value","value_truncated"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Search Strings"},{"analysisOperation":"set_address_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Assign an analyst name to one hexadecimal address and report Hopper\'s boolean result. This mutates analysis metadata; read it back with address_name before relying on it.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","name":"entry"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","name"],"type":"object"},"kind":"official-proxy","name":"set_address_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Address Name"},{"analysisOperation":"set_addresses_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Assign analyst names to an address/name map and return per-address success booleans. This mutates analysis metadata; use for bounded batches and verify failures individually.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"names":{"0x1000":"entry"}}],"properties":{"document":{"description":"The document name","type":"string"},"names":{"additionalProperties":{"type":"string"},"description":"Value for names.","propertyNames":{"type":"string"},"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["names"],"type":"object"},"kind":"official-proxy","name":"set_addresses_names","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"type":"boolean"},"propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Addresses Names"},{"analysisOperation":"set_bookmark","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Create or replace a bookmark at a hexadecimal address. This mutates navigation metadata; verify with list_bookmarks and do not treat bookmarks as binary evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"set_bookmark","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Bookmark"},{"analysisOperation":"set_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Write a regular analysis comment at a hexadecimal address and return whether readback matched. This mutates the Hopper document; use comments to record evidence IDs or reasoning.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","comment":"validated entry point"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"comment":{"description":"Exact analyst comment text to write.","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Comment"},{"analysisOperation":"set_current_document","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Select an already-open Hopper document by exact document name. This changes subsequent default-document routing; call list_documents first and prefer explicit document inputs where reproducibility matters.","effects":{"accessesNetwork":false,"changesUiState":true,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"document":"fixture"}],"properties":{"document":{"description":"Exact provider document or program identity.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["document"],"type":"object"},"kind":"official-proxy","name":"set_current_document","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Current Document"},{"analysisOperation":"set_inline_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Write an inline instruction comment at a hexadecimal address and return whether readback matched. This mutates analysis metadata; confirm with inline_comment.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","comment":"calls parser"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"comment":{"description":"Exact analyst comment text to write.","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_inline_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Inline Comment"},{"analysisOperation":"unset_bookmark","annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Remove the bookmark at a hexadecimal address and return whether it is absent. This mutates navigation metadata and does not alter binary bytes.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"unset_bookmark","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Unset Bookmark"},{"analysisOperation":"xrefs","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return analyzed references to a code or data address, defaulting to the current cursor. Use to connect strings, globals, selectors, and functions; bare addresses are untyped and indirect references may be incomplete.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"xrefs","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Xrefs"},{"analysisOperation":"swift_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover legacy-mangled Swift class procedures after exhaustively paging analyzed procedures. Returns at most 100 entries and scans at most 5,000 symbols; use analyze_swift_types for other Swift kinds.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"swift_classes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"classes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"},"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["count","classes"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Swift Classes"},{"analysisOperation":"get_objc_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C class labels after exhaustively paging names, optionally filtering by literal substring. Returns at most 100 classes; inspect matching metadata and references next.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"get_objc_classes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"classes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"},"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["count","classes"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Objc Classes"},{"analysisOperation":"get_objc_protocols","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C and Swift protocol labels after exhaustively paging names. Returns at most 100 entries; use xrefs or analyze_function to connect a protocol to implementations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"enhanced","name":"get_objc_protocols","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"protocols":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["count","protocols"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Objc Protocols"},{"analysisOperation":"batch_decompile","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile up to 20 explicit procedure symbols or addresses concurrently. Returns ordered per-item ok/error variants and aggregate counts; use analyze_function for a richer single-function dossier.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"addresses":[]}],"properties":{"addresses":{"default":[],"description":"Ordered provider-normalized procedure addresses to analyze.","items":{"description":"A provider-normalized procedure address","type":"string"},"maxItems":20,"type":"array"}},"type":"object"},"kind":"enhanced","name":"batch_decompile","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"failed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"pseudocode":{"minLength":1,"type":"string"},"status":{"const":"ok","type":"string"}},"required":["address","status","pseudocode"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"succeeded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","total","succeeded","failed"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Batch Decompile"},{"analysisOperation":"get_call_graph","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Traverse the bound provider\'s caller or callee relationships from one symbol or address for at most five levels. Every node has an ok/error status and failures use safe typed projections; unresolved indirect calls may be missing and results are not a whole-program CFG.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000","depth":2,"direction":"forward"}],"properties":{"address":{"description":"A provider-normalized procedure address","type":"string"},"depth":{"default":2,"description":"Value for depth.","maximum":5,"minimum":1,"type":"integer"},"direction":{"default":"forward","description":"Direction in which to traverse or compare relationships.","enum":["forward","backward"],"type":"string"}},"required":["address"],"type":"object"},"kind":"enhanced","name":"get_call_graph","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"calls":{"items":{"type":"string"},"type":"array"},"status":{"const":"ok","type":"string"}},"required":["address","status","calls"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Call Graph"},{"analysisOperation":"analyze_swift_types","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Categorize exhaustively paged procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols. Scans at most 5,000 names and returns at most 50 entries per category.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"enhanced","name":"analyze_swift_types","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"categories":{"additionalProperties":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["count","items"],"type":"object"},"propertyNames":{"type":"string"},"type":"object"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","categories"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Swift Types"},{"analysisOperation":"find_xrefs_to_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an exact name through the bound provider\'s exhaustively paged name inventory and return a resolved or unresolved result. Unresolved names use the stable name_not_found reason; this compact xref workflow returns address-only projections.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"name":"malloc"}],"properties":{"name":{"description":"Exact name used by this operation.","type":"string"}},"required":["name"],"type":"object"},"kind":"enhanced","name":"find_xrefs_to_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"},"status":{"const":"resolved","type":"string"},"xrefs":{"items":{"type":"string"},"type":"array"}},"required":["status","name","address","xrefs"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"reason":{"const":"name_not_found","type":"string"},"status":{"const":"unresolved","type":"string"}},"required":["status","name","reason"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Find Xrefs To Name"},{"analysisOperation":"binary_overview","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Use immediately after opening a target to summarize document, exhaustive procedure/string counts, and a bounded segment sample. detail controls segment fields and limit controls only the returned segment sample.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"detail":"concise","limit":10}],"properties":{"detail":{"default":"concise","description":"Requested response detail level.","enum":["concise","detailed"],"type":"string"},"limit":{"default":10,"description":"Maximum number of results to return in this page.","maximum":50,"minimum":1,"type":"integer"}},"type":"object"},"kind":"enhanced","name":"binary_overview","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"detail":{"enum":["concise","detailed"],"type":"string"},"document":{"type":"string"},"procedure_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"segment_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"segments":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"length":{"minimum":0,"type":"number"},"name":{"type":"string"},"start":{"type":"string"}},"required":["name","start","end"],"type":"object"},"type":"array"},"string_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["document","detail","segments","segment_count","procedure_count","string_count"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Binary Overview"},{"analysisOperation":"analyze_function","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Preferred bounded analysis for one procedure symbol or address. Returns identity, provider-specific pseudocode, optional assembly, comments, calls, typed-or-explicitly-unavailable references, referenced strings/names, and local CFG blocks with exact truncation metadata. Providers with a structured decompiler model also expose native API boundary types, confidence, evidence, jump-table data/target addresses, and explicit decompiler-artifact labels.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"assembly_offset":0,"collection_offset":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"include_assembly":false,"limit":100,"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main","pseudocode_offset":0}],"properties":{"assembly_offset":{"default":0,"description":"Zero-based index of the first assembly to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"collection_offset":{"additionalProperties":false,"default":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"description":"Zero-based index of the first collection to return.","properties":{"basic_blocks":{"default":0,"description":"Value for basic blocks.","maximum":9007199254740991,"minimum":0,"type":"integer"},"callees":{"default":0,"description":"Value for callees.","maximum":9007199254740991,"minimum":0,"type":"integer"},"callers":{"default":0,"description":"Value for callers.","maximum":9007199254740991,"minimum":0,"type":"integer"},"comments":{"default":0,"description":"Value for comments.","maximum":9007199254740991,"minimum":0,"type":"integer"},"incoming_references":{"default":0,"description":"Value for incoming references.","maximum":9007199254740991,"minimum":0,"type":"integer"},"outgoing_references":{"default":0,"description":"Value for outgoing references.","maximum":9007199254740991,"minimum":0,"type":"integer"},"referenced_names":{"default":0,"description":"Value for referenced names.","maximum":9007199254740991,"minimum":0,"type":"integer"},"referenced_strings":{"default":0,"description":"Value for referenced strings.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"include_assembly":{"default":false,"description":"Whether to include assembly in the result.","type":"boolean"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_pseudocode_chars":{"default":20000,"description":"Maximum permitted pseudocode chars for this operation.","maximum":100000,"minimum":1,"type":"integer"},"procedure":{"description":"A procedure name or address","type":"string"},"pseudocode_offset":{"default":0,"description":"Zero-based index of the first pseudocode to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"analyze_function","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"assembly":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"basic_blocks":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"start":{"type":"string"},"successors":{"items":{"type":"string"},"type":"array"}},"required":["start","end","successors"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"start":{"type":"string"},"successors":{"items":{"type":"string"},"type":"array"}},"required":["start","end","successors"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"callees":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"callers":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"comments":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"kind":{"enum":["comment","inline"],"type":"string"},"text":{"type":"string"}},"required":["address","kind","text"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"kind":{"enum":["comment","inline"],"type":"string"},"text":{"type":"string"}},"required":["address","kind","text"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"incoming_references":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"instruction_scan":{"additionalProperties":false,"properties":{"scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["scanned","truncated"],"type":"object"},"limitations":{"default":[],"items":{"type":"string"},"type":"array"},"native_api":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"minLength":1,"type":"string"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["available","reason","residual_unknowns"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"calling_convention":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-and-stack-variables","compiler-generated-control-flow","pointer-arithmetic","pseudocode"],"type":"string"},"type":"array"},"jump_tables":{"items":{"additionalProperties":false,"properties":{"data_sources":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"confidence":{"enum":["low","medium","high"],"type":"string"},"entry_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"entry_size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"provenance":{"enum":["ghidra-decompiler-load-table","ghidra-dispatch-block-data-reference"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"role":{"const":"parameter","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"type":"null"},"ordinal":{"type":"null"},"role":{"const":"return","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},{"type":"null"}],"default":null},"outgoing_references":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","classification","signature","locals"],"type":"object"},"pseudocode":{"oneOf":[{"additionalProperties":false,"properties":{"next_offset":{"type":"null"},"returned_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"total_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"const":false,"type":"boolean"}},"required":["text","total_chars","returned_chars","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"total_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"const":true,"type":"boolean"}},"required":["text","total_chars","returned_chars","truncated","next_offset"],"type":"object"}]},"referenced_names":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"referenced_strings":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]}},"required":["procedure","pseudocode","assembly","comments","callers","callees","incoming_references","outgoing_references","referenced_strings","referenced_names","basic_blocks","instruction_scan","native_api","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Function"},{"analysisOperation":"inspect_native_api","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Reconstruct one native function boundary through inspectable substeps. Returns structured inferred return/parameter types with confidence and evidence, jump-table dispatch/data/target mappings, explicit decompiler-artifact labels, unsupported branches, and residual unknowns.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main"}],"properties":{"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_pseudocode_chars":{"default":20000,"description":"Maximum permitted pseudocode chars for this operation.","maximum":100000,"minimum":1,"type":"integer"},"procedure":{"description":"A procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record unsupported native API branches durably","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"inspect_native_api","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"boundary":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"minLength":1,"type":"string"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["available","reason","residual_unknowns"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"calling_convention":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-and-stack-variables","compiler-generated-control-flow","pointer-arithmetic","pseudocode"],"type":"string"},"type":"array"},"jump_tables":{"items":{"additionalProperties":false,"properties":{"data_sources":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"confidence":{"enum":["low","medium","high"],"type":"string"},"entry_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"entry_size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"provenance":{"enum":["ghidra-decompiler-load-table","ghidra-dispatch-block-data-reference"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"role":{"const":"parameter","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"type":"null"},"ordinal":{"type":"null"},"role":{"const":"return","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},"procedure":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["address","name"],"type":"object"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"substeps":{"items":{"additionalProperties":false,"properties":{"observations":{"items":{"minLength":1,"type":"string"},"type":"array"},"operation":{"enum":["analyze_function","project_native_api_boundary","preserve_residual_unknowns"],"type":"string"},"status":{"enum":["completed","unsupported"],"type":"string"}},"required":["operation","status","observations"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"unsupported_branches":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["schema_version","procedure","boundary","substeps","unsupported_branches","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Native Api"},{"analysisOperation":"trace_feature","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a bounded literal feature query through matching strings and procedures, xrefs, and truthful containing-procedure resolution. Returns the operation budget, truncation, and residual unknowns; unknown_registry_approved: true records them durably without inferring reference kinds.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":20,"max_operations":20,"query":"license"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"limit":{"default":20,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_operations":{"default":20,"description":"Maximum permitted operations for this operation.","maximum":100,"minimum":1,"type":"integer"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"trace_feature","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"matches":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"type":{"enum":["string","procedure"],"type":"string"},"value":{"type":"string"}},"required":["type","address","value"],"type":"object"},"type":"array"},"operation_budget":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query":{"type":"string"},"references":{"items":{"additionalProperties":false,"properties":{"containing_procedure":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","operations_used","operation_budget","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Feature"},{"analysisOperation":"find_code_for_string","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve one literal string query to bounded analyzed string entries, xrefs, and truthful containing-procedure candidates. Returns an Evidence ID, exact operation budget, truncation, and residual unknowns; it never infers reference kinds or runtime reachability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":20,"max_operations":20,"query":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"limit":{"default":20,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_operations":{"default":20,"description":"Maximum permitted operations for this operation.","maximum":100,"minimum":1,"type":"integer"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"find_code_for_string","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"matches":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"type":{"enum":["string","procedure"],"type":"string"},"value":{"type":"string"}},"required":["type","address","value"],"type":"object"},"type":"array"},"operation_budget":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query":{"type":"string"},"references":{"items":{"additionalProperties":false,"properties":{"containing_procedure":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","operations_used","operation_budget","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Find Code For String"},{"analysisOperation":"trace_call_path","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a deterministic bounded caller or callee path from one exact procedure address, optionally stopping at a goal. Returns visited nodes, direct-call edges, one shortest traversal path, failures, frontier, consumed limits, an Evidence ID, and explicit residual unknowns without claiming unresolved indirect calls are absent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"direction":"forward","goal":"0x1100","max_depth":5,"max_nodes":100,"max_operations":100,"start":"0x1000"}],"properties":{"direction":{"default":"forward","description":"Direction in which to traverse or compare relationships.","enum":["forward","backward"],"type":"string"},"goal":{"description":"An optional provider-normalized destination address","type":"string"},"max_depth":{"default":5,"description":"Maximum permitted depth for this operation.","maximum":10,"minimum":1,"type":"integer"},"max_nodes":{"default":100,"description":"Maximum permitted nodes for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_operations":{"default":100,"description":"Maximum permitted operations for this operation.","maximum":500,"minimum":1,"type":"integer"},"start":{"description":"A provider-normalized procedure address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["start"],"type":"object"},"kind":"enhanced","name":"trace_call_path","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"direction":{"enum":["forward","backward"],"type":"string"},"edges":{"items":{"additionalProperties":false,"properties":{"discovery_depth":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["source_address","target_address","discovery_depth"],"type":"object"},"type":"array"},"failures":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]}},"required":["address","error"],"type":"object"},"type":"array"},"frontier":{"items":{"type":"string"},"type":"array"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}]},"goal_status":{"enum":["not_requested","reached","not_reached"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_depth":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_nodes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_operations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"nodes_visited":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["max_depth","max_nodes","max_operations","nodes_visited","operations_used"],"type":"object"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"depth":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","depth"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"start":{"type":"string"},"traversal_path":{"items":{"type":"string"},"type":"array"},"truncated":{"type":"boolean"}},"required":["start","goal","direction","goal_status","nodes","edges","traversal_path","failures","frontier","limits","truncated","residual_unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Call Path"},{"analysisOperation":"inspect_macho","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect Mach-O slices, load commands, imports, exports, dependencies, build metadata, segments, sections, permissions, and exact command provenance without launching Hopper.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"inspect_macho","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"architectures":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"cpu_subtype":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"name":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","cpu_type","cpu_subtype","file_offset","size","alignment"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"build_metadata":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"minimum_os":{"anyOf":[{"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"type":"string"},{"type":"null"}]},"sdk":{"anyOf":[{"type":"string"},{"type":"null"}]},"tools":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},"type":"array"}},"required":["platform","minimum_os","sdk","tools"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"dependencies":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"compatibility_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string"},"path":{"type":"string"}},"required":["path","kind","current_version","compatibility_version"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"endian":{"anyOf":[{"enum":["little","big"],"type":"string"},{"type":"null"}]},"entrypoints":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"file_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["file_offset"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"exports":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"reexport":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"weak":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","address","weak","reexport","source"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"file_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"items":{"type":"string"},"type":"array"},"format":{"const":"mach-o","type":"string"},"imports":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"reexport":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"weak":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","address","weak","reexport","source"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"load_commands":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"propertyNames":{"type":"string"},"type":"object"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"type":"string"}},"required":["index","kind","file_offset","fields"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"segments":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"initial_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"maximum_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"name":{"type":"string"},"sections":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flags":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"segment":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["segment","name","address","size","file_offset","alignment","flags"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"vm_address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"vm_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","vm_address","vm_size","file_offset","file_size","maximum_permissions","initial_permissions","sections"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_size":{"anyOf":[{"anyOf":[{"const":32,"type":"number"},{"const":64,"type":"number"}]},{"type":"null"}]}},"required":["format","endian","word_size","file_type","flags","uuid","entrypoints","architectures","build_metadata","load_commands","dependencies","imports","exports","segments","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Macho"},{"analysisOperation":"inspect_signature","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect the active artifact\'s code-signing identity, hashes, authorities, requirements, entitlements, hardened-runtime state, and bounded command provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"inspect_signature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"authorities":{"items":{"type":"string"},"type":"array"},"cdhashes":{"items":{"type":"string"},"type":"array"},"designated_requirement":{"anyOf":[{"type":"string"},{"type":"null"}]},"entitlements":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"hardened_runtime":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"hash_algorithms":{"items":{"type":"string"},"type":"array"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"signed":{"type":"boolean"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["signed","identifier","team_identifier","format","cdhashes","hash_algorithms","authorities","designated_requirement","entitlements","timestamp","hardened_runtime","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Signature"},{"analysisOperation":"inspect_plist","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Parse a plist at a bounded relative path beneath the active artifact container. Symlink and traversal escapes are rejected; output is normalized JSON rather than plutil text.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"relative_path":"Contents/Info.plist"}],"properties":{"relative_path":{"default":"Contents/Info.plist","description":"Local filesystem path for relative.","maxLength":1024,"minLength":1,"type":"string"}},"type":"object"},"kind":"native-provider","name":"inspect_plist","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"bundle":{"additionalProperties":false,"properties":{"executable":{"anyOf":[{"type":"string"},{"type":"null"}]},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"short_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["identifier","executable","name","version","short_version"],"type":"object"},"format":{"enum":["xml","binary","json","unknown"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"source_path":{"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["format","value","bundle","source_path","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Plist"},{"analysisOperation":"list_architectures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List thin or universal Mach-O slices with offsets, sizes, alignment, explicit coverage, and bounded native-tool provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"list_architectures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"architectures":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"cpu_subtype":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"name":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","cpu_type","cpu_subtype","file_offset","size","alignment"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"}},"required":["architectures","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Architectures"},{"analysisOperation":"demangle_swift","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Demangle an ordered bounded batch of Swift symbols without requiring Hopper. Each input returns demangled, unchanged, or invalid status.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"symbols":["$s4Test3fooyyF"]}],"properties":{"symbols":{"description":"Ordered bounded Swift symbols to demangle.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":500,"minItems":1,"type":"array"}},"required":["symbols"],"type":"object"},"kind":"native-provider","name":"demangle_swift","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"symbols":{"items":{"additionalProperties":false,"properties":{"input":{"type":"string"},"output":{"type":"string"},"status":{"enum":["demangled","unchanged","invalid"],"type":"string"}},"required":["input","output","status"],"type":"object"},"type":"array"}},"required":["symbols","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Demangle Swift"},{"analysisOperation":"inventory_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inventory it as a deterministic, content-addressed artifact graph. This tool accepts no path; in a target-free session open the target first. Returns bounded node and edge pages without extracting or mounting by default.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"edge_limit":{"default":100,"description":"Maximum number of edge entries to return.","maximum":500,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"},"node_limit":{"default":100,"description":"Maximum number of node entries to return.","maximum":500,"minimum":1,"type":"integer"},"node_offset":{"default":0,"description":"Zero-based index of the first node to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"occurrence_limit":{"default":100,"description":"Maximum number of occurrence entries to return.","maximum":500,"minimum":1,"type":"integer"},"occurrence_offset":{"default":0,"description":"Zero-based index of the first occurrence to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},{"properties":{"edge_limit":{"default":100,"description":"Maximum number of edge entries to return.","maximum":500,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"},"node_limit":{"default":100,"description":"Maximum number of node entries to return.","maximum":500,"minimum":1,"type":"integer"},"node_offset":{"default":0,"description":"Zero-based index of the first node to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"occurrence_limit":{"default":100,"description":"Maximum number of occurrence entries to return.","maximum":500,"minimum":1,"type":"integer"},"occurrence_offset":{"default":0,"description":"Zero-based index of the first occurrence to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["integrity_policy","integrity_continue_approved"],"type":"object"}],"examples":[{}],"type":"object"},"kind":"artifact-provider","name":"inventory_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"edges":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"child_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"edge_id":{"pattern":"^edge_[a-f0-9]{64}$","type":"string"},"logical_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"producer":{"anyOf":[{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},{"type":"null"}]},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"}},"required":["edge_id","ordinal","parent_artifact_id","child_artifact_id","relation","occurrence_id","logical_path","producer"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"integrity_contradictions":{"default":[],"items":{"additionalProperties":false,"properties":{"contradiction_id":{"pattern":"^ic_[a-f0-9]{64}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"entry_kind":{"enum":["file","slice"],"type":"string"},"limitations":{"items":{"type":"string"},"minItems":1,"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"provenance":{"const":"container-integrity-metadata-versus-observed-bytes","type":"string"},"trust":{"const":"observed-untrusted","type":"string"},"unpacked":{"type":"boolean"}},"required":["contradiction_id","occurrence_id","parent_artifact_id","logical_path","declared_sha256","observed_sha256","entry_kind","unpacked","trust","provenance","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","manifest_id","root_artifact_id","root_sha256","root_format","graph_sha256","node_count","occurrence_count","edge_count"],"type":"object"},"nodes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"content_state":{"enum":["materialized","embedded","virtual"],"type":"string"},"executable":{"type":"boolean"},"format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"kind":{"enum":["container","executable","dynamic-library","framework","native-addon","javascript","source-map","plist","entitlements","resource","universal-slice","package-metadata","unknown"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"media_type":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["artifact_id","kind","format","sha256","size","media_type","architecture","executable","content_state","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"occurrences":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"compressed_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"declared_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"encrypted":{"type":"boolean"},"entry_kind":{"enum":["file","directory","symlink","slice"],"type":"string"},"executable":{"type":"boolean"},"hash_status":{"enum":["verified","mismatched","not-hashed-limit","unavailable"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"source_location":{"anyOf":[{"additionalProperties":false,"properties":{"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","length"],"type":"object"},{"type":"null"}]}},"required":["occurrence_id","artifact_id","parent_occurrence_id","logical_path","entry_kind","declared_size","compressed_size","executable","encrypted","hash_status","source_location","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"provenance":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","nodes","occurrences","edges","limits","provenance","integrity_contradictions","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inventory Artifact"},{"analysisOperation":"inspect_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inspect it through one bounded, cancellable inventory substep. This tool accepts no path; in a target-free session open the target first. Returns the full substep Evidence and its ID, observations, derived relationships, hypotheses, contradictions, unexplored branches, limitations, and format-specific next probes. Any substep failure fails the whole call.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_hypotheses":{"default":20,"description":"Maximum permitted hypotheses for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_next_probes":{"default":20,"description":"Maximum permitted next probes for this operation.","maximum":50,"minimum":1,"type":"integer"},"max_observations":{"default":100,"description":"Maximum permitted observations for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_relationships":{"default":100,"description":"Maximum permitted relationships for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_substeps":{"const":1,"default":1,"description":"Maximum permitted substeps for this operation.","type":"number"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_unexplored_branches":{"default":20,"description":"Maximum permitted unexplored branches for this operation.","maximum":100,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"type":"object"},{"properties":{"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_hypotheses":{"default":20,"description":"Maximum permitted hypotheses for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_next_probes":{"default":20,"description":"Maximum permitted next probes for this operation.","maximum":50,"minimum":1,"type":"integer"},"max_observations":{"default":100,"description":"Maximum permitted observations for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_relationships":{"default":100,"description":"Maximum permitted relationships for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_substeps":{"const":1,"default":1,"description":"Maximum permitted substeps for this operation.","type":"number"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_unexplored_branches":{"default":20,"description":"Maximum permitted unexplored branches for this operation.","maximum":100,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"required":["integrity_policy","integrity_continue_approved"],"type":"object"}],"examples":[{}],"type":"object"},"kind":"artifact-provider","name":"inspect_artifact","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"contradictions":{"items":{"additionalProperties":false,"properties":{"contradiction_id":{"pattern":"^aic_[a-f0-9]{64}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"statement":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["contradiction_id","statement","occurrence_id","declared_sha256","observed_sha256","evidence_id"],"type":"object"},"maxItems":100,"type":"array"},"coverage":{"additionalProperties":false,"properties":{"hypotheses_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hypotheses_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_probes_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_probes_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observations_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observations_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relationships_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relationships_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-substeps","partial","truncated"],"type":"string"},"substeps_completed":{"const":1,"type":"number"},"unexplored_branches_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unexplored_branches_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","substeps_completed","observations_retained","observations_omitted","relationships_retained","relationships_omitted","hypotheses_retained","hypotheses_omitted","unexplored_branches_retained","unexplored_branches_omitted","next_probes_retained","next_probes_omitted"],"type":"object"},"derived_relationships":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"logical_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"},"relationship_id":{"pattern":"^air_[a-f0-9]{64}$","type":"string"},"source_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"target_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"}},"required":["relationship_id","relation","source_artifact_id","target_artifact_id","occurrence_id","logical_path","evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"hypotheses":{"items":{"additionalProperties":false,"properties":{"basis_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":8,"minItems":1,"type":"array"},"confidence":{"enum":["medium","low"],"type":"string"},"hypothesis_id":{"pattern":"^aih_[a-f0-9]{64}$","type":"string"},"limitation":{"maxLength":4096,"minLength":1,"type":"string"},"statement":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["hypothesis_id","statement","confidence","basis_evidence_ids","limitation"],"type":"object"},"maxItems":100,"type":"array"},"inspection_id":{"pattern":"^ai_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"next_probes":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},"maxItems":50,"type":"array"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["root-manifest","artifact","occurrence","integrity"],"type":"string"},"observation_id":{"pattern":"^aio_[a-f0-9]{64}$","type":"string"},"subject":{"maxLength":4096,"minLength":1,"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["observation_id","kind","subject","value","evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"schema_version":{"const":1,"type":"number"},"subject":{"additionalProperties":false,"properties":{"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"maxLength":128,"minLength":1,"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["manifest_id","root_artifact_id","root_sha256","root_format"],"type":"object"},"substeps":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"const":"inventory_artifact","type":"string"},"status":{"const":"completed","type":"string"},"substep_id":{"pattern":"^ais_[a-f0-9]{64}$","type":"string"}},"required":["substep_id","operation","status","evidence_id","evidence"],"type":"object"},"maxItems":1,"minItems":1,"type":"array"},"unexplored_branches":{"items":{"additionalProperties":false,"properties":{"branch_id":{"pattern":"^aib_[a-f0-9]{64}$","type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"next_probe":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},{"type":"null"}]},"reason":{"enum":["page-limit","format-specific-analysis-required","unknown-format"],"type":"string"}},"required":["branch_id","reason","detail","next_probe","evidence_id"],"type":"object"},"maxItems":100,"type":"array"}},"required":["schema_version","inspection_id","subject","substeps","observations","derived_relationships","hypotheses","contradictions","unexplored_branches","next_probes","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Artifact"},{"analysisOperation":"extract_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Extract selected graph artifacts beneath an explicit output root. Requires approval, rejects traversal and symlink escapes, never overwrites, enforces bomb limits, and verifies cleanup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"occurrence_ids":["occ_0000000000000000000000000000000000000000000000000000000000000000"],"output_root":"/tmp/rea-extracted"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_ids":{"description":"Value for occurrence ids.","items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"output_root":{"description":"Approved canonical filesystem output root.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","output_root","occurrence_ids"],"type":"object"},"kind":"artifact-provider","name":"extract_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifacts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"bytes_written":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"created":{"type":"boolean"},"relative_path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["artifact_id","relative_path","sha256","bytes_written","created"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"cleanup":{"additionalProperties":false,"properties":{"attempted":{"type":"boolean"},"residual_paths":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":500,"type":"array"},"verified":{"type":"boolean"}},"required":["attempted","verified","residual_paths"],"type":"object"},"containment_verified":{"type":"boolean"},"extraction_manifest":{"additionalProperties":false,"properties":{"extraction_id":{"pattern":"^aex_[a-f0-9]{64}$","type":"string"},"files_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_root_alias":{"const":"$OUTPUT_ROOT","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_occurrence_ids":{"items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"source_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","extraction_id","source_manifest_id","selected_occurrence_ids","files_sha256","output_root_alias"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","manifest_id","root_artifact_id","root_sha256","root_format","graph_sha256","node_count","occurrence_count","edge_count"],"type":"object"},"output_root":{"minLength":1,"type":"string"},"provenance":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","extraction_manifest","output_root","artifacts","containment_verified","cleanup","limits","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Extract Artifact"},{"analysisOperation":"inspect_managed_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Open and classify an explicit managed PE/CLI path, or inspect the active managed target, then inventory exact assembly/module identity, target framework evidence, references, resources, and custom attributes without loading or executing target code. Returns bounded pages and explicit partial or malformed coverage.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"path":"/tmp/Example.dll"}],"properties":{"attribute_limit":{"default":100,"description":"Maximum number of attribute entries to return.","maximum":500,"minimum":1,"type":"integer"},"attribute_offset":{"default":0,"description":"Zero-based index of the first attribute to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"path":{"description":"Managed PE/CLI path to open before inspection; omit only when a managed target is already active","minLength":1,"type":"string"},"reference_limit":{"default":100,"description":"Maximum number of reference entries to return.","maximum":500,"minimum":1,"type":"integer"},"reference_offset":{"default":0,"description":"Zero-based index of the first reference to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"resource_limit":{"default":100,"description":"Maximum number of resource entries to return.","maximum":500,"minimum":1,"type":"integer"},"resource_offset":{"default":0,"description":"Zero-based index of the first resource to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"assembly":{"anyOf":[{"additionalProperties":false,"properties":{"culture":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"hash_algorithm":{"maximum":4294967295,"minimum":0,"type":"integer"},"name":{"type":"string"},"public_key":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["none","public-key","public-key-token"],"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"token":{"anyOf":[{"pattern":"^[a-f0-9]{16}$","type":"string"},{"type":"null"}]}},"required":["kind","byte_length","sha256","token"],"type":"object"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"version":{"pattern":"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$","type":"string"}},"required":["name","version","culture","flags","hash_algorithm","public_key","token","row_offset"],"type":"object"},{"type":"null"}]},"attributes":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"constructor_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"decoded_fixed_string":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"type_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["parent_token","constructor_token","type_name","value_length","value_sha256","decoded_fixed_string","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"classification":{"additionalProperties":false,"properties":{"container":{"const":"pe","type":"string"},"evidence":{"items":{"additionalProperties":false,"properties":{"code":{"minLength":1,"type":"string"},"detail":{"minLength":1,"type":"string"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["code","detail","file_offset"],"type":"object"},"type":"array"},"implementation":{"enum":["cil","cil-and-ready-to-run","cpp-cli-mixed","metadata-only","not-managed","unknown"],"type":"string"},"managed_architecture":{"enum":["anycpu","anycpu-prefer-32","x86","x86_64","arm","arm64","unknown"],"type":"string"},"runtime_family":{"enum":["dotnet-framework","modern-dotnet","unity-mono","mixed-clr-native","unknown"],"type":"string"},"status":{"enum":["managed","not-managed","malformed"],"type":"string"}},"required":["status","container","runtime_family","implementation","managed_architecture","evidence"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"stream_names":{"items":{"type":"string"},"type":"array"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","stream_names","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"pe":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"characteristics":{"maximum":65535,"minimum":0,"type":"integer"},"cli":{"anyOf":[{"additionalProperties":false,"properties":{"entry_point":{"additionalProperties":false,"properties":{"kind":{"enum":["metadata-token","native-rva","none"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"flag_names":{"items":{"type":"string"},"type":"array"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"header_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"header_size":{"maximum":9007199254740991,"minimum":72,"type":"integer"},"managed_native_header_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"managed_native_header_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"metadata_rva":{"maximum":4294967295,"minimum":1,"type":"integer"},"metadata_size":{"maximum":4294967295,"minimum":1,"type":"integer"},"ready_to_run_signature":{"type":"boolean"},"resources_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"resources_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"runtime_version":{"type":"string"},"strong_name_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"strong_name_size":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["header_offset","header_size","runtime_version","flags","flag_names","entry_point","metadata_rva","metadata_size","resources_rva","resources_size","strong_name_rva","strong_name_size","managed_native_header_rva","managed_native_header_size","ready_to_run_signature"],"type":"object"},{"type":"null"}]},"machine":{"maximum":65535,"minimum":0,"type":"integer"},"machine_hex":{"pattern":"^0x[0-9a-f]{4}$","type":"string"},"optional_header":{"enum":["pe32","pe32-plus"],"type":"string"},"section_count":{"maximum":96,"minimum":1,"type":"integer"}},"required":["machine","machine_hex","architecture","optional_header","section_count","characteristics","cli"],"type":"object"},"references":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"culture":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"hash_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hash_value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"public_key_or_token":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["none","public-key","public-key-token"],"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"token":{"anyOf":[{"pattern":"^[a-f0-9]{16}$","type":"string"},{"type":"null"}]}},"required":["kind","byte_length","sha256","token"],"type":"object"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"version":{"pattern":"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$","type":"string"}},"required":["name","version","culture","flags","public_key_or_token","hash_value_sha256","hash_value_length","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"resources":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"data_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"data_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"declared_offset":{"maximum":4294967295,"minimum":0,"type":"integer"},"embedded":{"type":"boolean"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"implementation_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"visibility":{"enum":["public","private","unknown"],"type":"string"}},"required":["name","flags","visibility","implementation_token","embedded","declared_offset","data_length","data_sha256","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"schema_version":{"const":1,"type":"number"},"target_frameworks":{"items":{"type":"string"},"type":"array"}},"required":["schema_version","artifact","pe","classification","metadata","module","assembly","target_frameworks","references","resources","attributes","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Artifact"},{"analysisOperation":"inspect_managed_members","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect bounded PE/CLI metadata members, signatures, raw CIL hashes, limited member-result-v1 decoded-instruction-tuple hashes, separately reported exception regions, call edges, and field-access anchors without loading or executing target code. Metadata tokens are reported as build-local coordinates bound to the artifact SHA-256 and MVID; the v1 tuple hash does not resolve them or fully commit control flow.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"edge_limit":100,"method_limit":25}],"properties":{"edge_limit":{"default":250,"description":"Maximum number of edge entries to return.","maximum":1000,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"field_limit":{"default":100,"description":"Maximum number of field entries to return.","maximum":500,"minimum":1,"type":"integer"},"field_offset":{"default":0,"description":"Zero-based index of the first field to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"instruction_anchor_limit":{"default":100,"description":"Maximum number of instruction anchor entries to return.","maximum":500,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_method_body_bytes":{"default":1048576,"description":"Maximum permitted method body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_method_instructions":{"default":10000,"description":"Maximum permitted method instructions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"member_ref_limit":{"default":100,"description":"Maximum number of member ref entries to return.","maximum":500,"minimum":1,"type":"integer"},"member_ref_offset":{"default":0,"description":"Zero-based index of the first member ref to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"method_limit":{"default":100,"description":"Maximum number of method entries to return.","maximum":500,"minimum":1,"type":"integer"},"method_offset":{"default":0,"description":"Zero-based index of the first method to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"type_limit":{"default":100,"description":"Maximum number of type entries to return.","maximum":500,"minimum":1,"type":"integer"},"type_offset":{"default":0,"description":"Zero-based index of the first type to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_members","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"call_edges":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"caller":{"anyOf":[{"type":"string"},{"type":"null"}]},"caller_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"opcode":{"type":"string"},"target_kind":{"enum":["method-def","member-ref","method-spec","unknown"],"type":"string"},"target_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"target_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["caller_token","caller","opcode","target_token","target_kind","target_name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"field_accesses":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"field_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"method_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"opcode":{"type":"string"}},"required":["method_token","method","opcode","field_token","field_name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"fields":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"declaring_type_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","declaring_type_token","declaring_type","name","flags","signature"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"identity_scope":{"additionalProperties":false,"properties":{"requires_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requires_mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"token_identity":{"const":"build-local","type":"string"}},"required":["token_identity","requires_artifact_sha256","requires_mvid"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"member_refs":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"parent_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","parent_token","name","signature"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","table_row_counts"],"type":"object"},"methods":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"body":{"additionalProperties":false,"properties":{"anchors":{"items":{"additionalProperties":false,"properties":{"il_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"opcode":{"minLength":1,"type":"string"},"operand":{"anyOf":[{"type":"string"},{"type":"null"}]},"operand_kind":{"enum":["none","branch","constant","field","method","signature","string","switch","token","type","variable","unknown"],"type":"string"}},"required":["il_offset","opcode","operand_kind","operand"],"type":"object"},"type":"array"},"decoded_instruction_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exception_regions":{"items":{"additionalProperties":false,"properties":{"class_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"filter_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"handler_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"handler_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"try_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"try_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["flags","try_offset","try_length","handler_offset","handler_length","class_token","filter_offset"],"type":"object"},"type":"array"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"header_format":{"enum":["tiny","fat","none","unknown"],"type":"string"},"il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"SHA-256 of exactly the raw il_size CIL bytes; excludes the method header, locals signature, alignment, and extra sections"},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"init_locals":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"instruction_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"local_var_sig_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"max_stack":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Member-result-v1 SHA-256 of UTF-8 JSON [opcode, operand_kind, operand] tuples for a complete decode; retains build-local tokens, omits switch targets, and excludes headers, locals, and exception regions"},"opcode_counts":{"additionalProperties":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"status":{"enum":["present","partial","absent","malformed","too-large"],"type":"string"},"truncated_instructions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","header_format","rva","file_offset","max_stack","init_locals","local_var_sig_token","il_size","il_sha256","normalized_il_sha256","instruction_count","decoded_instruction_count","truncated_instructions","opcode_counts","anchors","exception_regions","issue"],"type":"object"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"declaring_type_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"impl_flags":{"maximum":65535,"minimum":0,"type":"integer"},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","declaring_type_token","declaring_type","name","rva","impl_flags","flags","signature","body"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"types":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"extends_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"field_list":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_row":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"last_row":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["first_row","last_row","count"],"type":"object"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"full_name":{"type":"string"},"method_list":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_row":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"last_row":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["first_row","last_row","count"],"type":"object"},"name":{"type":"string"},"namespace":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","namespace","name","full_name","flags","extends_token","field_list","method_list"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"}},"required":["schema_version","artifact","module","metadata","identity_scope","types","fields","methods","member_refs","call_edges","field_accesses","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Members"},{"analysisOperation":"inspect_managed_native_boundaries","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect PE/CLI ModuleRef, ImplMap/PInvoke declarations, CLI native-header indicators, and non-IL method implementation flags without loading or executing target code. Results are managed declarations and degraded native-boundary observations, not verified native exports or addresses.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"implementation_limit":50,"import_limit":50}],"properties":{"implementation_limit":{"default":100,"description":"Maximum number of implementation entries to return.","maximum":500,"minimum":1,"type":"integer"},"implementation_offset":{"default":0,"description":"Zero-based index of the first implementation to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"import_limit":{"default":100,"description":"Maximum number of import entries to return.","maximum":500,"minimum":1,"type":"integer"},"import_offset":{"default":0,"description":"Zero-based index of the first import to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"module_ref_limit":{"default":100,"description":"Maximum number of module ref entries to return.","maximum":500,"minimum":1,"type":"integer"},"module_ref_offset":{"default":0,"description":"Zero-based index of the first module ref to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_native_boundaries","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"cli_native":{"additionalProperties":false,"properties":{"il_only":{"type":"boolean"},"managed_native_header_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"managed_native_header_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"native_entry_point":{"type":"boolean"},"ready_to_run_signature":{"type":"boolean"},"requires_32bit":{"type":"boolean"},"strong_name_signed":{"type":"boolean"}},"required":["il_only","requires_32bit","strong_name_signed","native_entry_point","ready_to_run_signature","managed_native_header_rva","managed_native_header_size"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"identity_scope":{"additionalProperties":false,"properties":{"requires_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requires_mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"token_identity":{"const":"build-local","type":"string"}},"required":["token_identity","requires_artifact_sha256","requires_mvid"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"module_refs":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"native_implementations":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"body_interpretation":{"enum":["managed-cil","native-or-runtime","not-file-backed","unknown"],"type":"string"},"boundary_kind":{"enum":["pinvoke","native-body","runtime-provided","unmanaged-method","mixed-or-unknown"],"type":"string"},"code_type":{"enum":["il","native","optil","runtime","unknown"],"type":"string"},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"impl_flags":{"maximum":65535,"minimum":0,"type":"integer"},"managed_kind":{"enum":["managed","unmanaged","unknown"],"type":"string"},"name":{"type":"string"},"pinvoke_declared":{"type":"boolean"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","name","rva","flags","impl_flags","code_type","managed_kind","pinvoke_declared","boundary_kind","body_interpretation"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"pinvoke_imports":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"best_fit":{"enum":["assembly-default","enabled","disabled","unknown"],"type":"string"},"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"import_name":{"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"import_scope_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"mapping_flags":{"maximum":65535,"minimum":0,"type":"integer"},"mapping_flags_hex":{"pattern":"^0x[0-9a-f]{4}$","type":"string"},"member_kind":{"enum":["method","field","unknown"],"type":"string"},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"supports_last_error":{"type":"boolean"},"throw_on_unmappable_char":{"enum":["assembly-default","enabled","disabled","unknown"],"type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"verification":{"const":"managed-declaration-only","type":"string"}},"required":["token","row_offset","mapping_flags","mapping_flags_hex","member_token","member_kind","member_name","import_name","import_scope_token","import_scope_name","no_mangle","char_set","call_convention","supports_last_error","best_fit","throw_on_unmappable_char","verification"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"mixed_mode_or_native_header":{"type":"boolean"},"module_ref_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_implementation_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_import_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ready_to_run":{"type":"boolean"}},"required":["module_ref_count","pinvoke_import_count","native_implementation_count","ready_to_run","mixed_mode_or_native_header"],"type":"object"}},"required":["schema_version","artifact","module","metadata","identity_scope","cli_native","module_refs","pinvoke_imports","native_implementations","summary","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Native Boundaries"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two authenticated inspect_managed_members Evidence records using unique-only decoded-CIL-v1/signature and structural method-shape tiers. Names are reported as observations but are not used as a matching basis; metadata tokens remain build-local coordinates bound to each artifact SHA-256 and MVID, and the v1 tuple digest does not itself remap them.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_45a77d52db5dc9beaf59a9b8ee062c945fda709bd0d3a91fa4e972d85a848324","limits":{"max_candidates":25,"max_field_matches":50,"max_method_matches":100},"right_evidence_id":"ev_8d6450759b2bb695b3b41b0db8d7ddc4a3e9f64a52b93194bc59d2b564c2285c"}],"properties":{"left_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidates":50,"max_field_matches":5000,"max_method_matches":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidates":{"default":50,"description":"Maximum permitted candidates for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_field_matches":{"default":5000,"description":"Maximum permitted field matches for this operation.","maximum":50000,"minimum":0,"type":"integer"},"max_method_matches":{"default":10000,"description":"Maximum permitted method matches for this operation.","maximum":50000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"application","name":"compare_managed_members","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"algorithm":{"additionalProperties":false,"properties":{"name":{"const":"rea-managed-member-comparison","type":"string"},"name_matching":{"const":"not-used","type":"string"},"token_identity":{"const":"build-local","type":"string"},"version":{"const":1,"type":"number"}},"required":["name","version","token_identity","name_matching"],"type":"object"},"comparison_id":{"pattern":"^mmc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_status":{"enum":["complete","partial","unavailable"],"type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_status":{"enum":["complete","partial","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","left_status","right_status","omitted_methods","omitted_fields","omitted_candidates"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"fields":{"items":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"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"},"maxItems":500,"minItems":1,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"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"}]},"maxItems":50000,"type":"array"},"left":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"fields_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"methods_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","mvid","module_name","metadata_status","methods_total","fields_total"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"matching":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_il_signature":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"field_signature":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural_method_shape":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["exact_il_signature","structural_method_shape","field_signature","ambiguous","unmatched"],"type":"object"},"methods":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"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"}]},"maxItems":50000,"type":"array"},"right":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"fields_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"methods_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","mvid","module_name","metadata_status","methods_total","fields_total"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","changed","added","removed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","algorithm","left","right","summary","matching","methods","fields","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Managed Members"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Verify managed P/Invoke/native-boundary declarations against authenticated native export or function Evidence without executing managed code or translating managed metadata tokens into native addresses. The workflow preserves declaration-only, verified, inferred, contradicted, and unresolved states.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limits":{"max_candidates_per_import":25,"max_native_observations":20},"managed_boundaries_evidence_id":"ev_5e142d4464b916bcff63fb0835c686152b5b0473a9f1d5f5060d329b1b29739d","native_observation_evidence_ids":["ev_74758ad108882d5752dae4f8fa030c1ed6c7dd62857cb9d2d3a7ce931b52ee7c"]}],"properties":{"limits":{"additionalProperties":false,"default":{"max_candidates_per_import":25,"max_native_observations":20},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidates_per_import":{"default":25,"description":"Maximum permitted candidates per import for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_native_observations":{"default":20,"description":"Maximum permitted native observations for this operation.","maximum":50,"minimum":1,"type":"integer"}},"type":"object"},"managed_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"native_observation_evidence_ids":{"description":"Unique session-owned native observation Evidence IDs","items":{"description":"Session-owned inspect_macho or analyze_function Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":50,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["managed_boundaries_evidence_id","native_observation_evidence_ids"],"type":"object"},"kind":"application","name":"verify_managed_native_boundaries","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"algorithm":{"additionalProperties":false,"properties":{"name":{"const":"rea-managed-native-verification","type":"string"},"token_identity":{"const":"build-local","type":"string"},"token_to_address_mapping":{"const":"not-inferred","type":"string"},"version":{"const":1,"type":"number"}},"required":["name","version","token_identity","token_to_address_mapping"],"type":"object"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"omitted_candidates":{"const":0,"type":"number"},"omitted_native_observations":{"const":0,"type":"number"},"status":{"const":"complete-within-inputs","type":"string"}},"required":["status","omitted_native_observations","omitted_candidates"],"type":"object"},{"additionalProperties":false,"properties":{"omitted_candidates":{"const":0,"type":"number"},"omitted_native_observations":{"const":0,"type":"number"},"status":{"const":"partial","type":"string"}},"required":["status","omitted_native_observations","omitted_candidates"],"type":"object"},{"anyOf":[{"additionalProperties":false,"properties":{"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_native_observations":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"status":{"const":"truncated","type":"string"}},"required":["status","omitted_native_observations","omitted_candidates"],"type":"object"},{"additionalProperties":false,"properties":{"omitted_candidates":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"omitted_native_observations":{"const":0,"type":"number"},"status":{"const":"truncated","type":"string"}},"required":["status","omitted_native_observations","omitted_candidates"],"type":"object"}]}]},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":51,"minItems":2,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"managed_boundary":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage_state":{"enum":["complete","partial","unavailable"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"native_implementations_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_imports_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["evidence_id","artifact_sha256","artifact_path","mvid","metadata_status","pinvoke_imports_total","native_implementations_total","coverage_state"],"type":"object"},"native_implementations":{"additionalProperties":false,"properties":{"reason":{"maxLength":4096,"minLength":1,"type":"string"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unresolved","reason"],"type":"object"},"native_observations":{"additionalProperties":false,"properties":{"accepted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symbols":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"truncated":{"type":"boolean"},"unsupported":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","accepted","unsupported","symbols","truncated"],"type":"object"},"pinvoke_imports":{"items":{"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"},"maxItems":100,"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"},"maxItems":51,"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"managed":{"additionalProperties":false,"properties":{"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"declaration_verification":{"const":"managed-declaration-only","type":"string"},"import_name":{"minLength":1,"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","member_token","member_name","import_name","import_scope_name","no_mangle","char_set","call_convention","declaration_verification"],"type":"object"},"matched_native":{"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"},"maxItems":100,"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"},"maxItems":51,"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"managed":{"additionalProperties":false,"properties":{"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"declaration_verification":{"const":"managed-declaration-only","type":"string"},"import_name":{"minLength":1,"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","member_token","member_name","import_name","import_scope_name","no_mangle","char_set","call_convention","declaration_verification"],"type":"object"},"matched_native":{"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":{"prefixItems":[],"type":"array"},"confidence":{"const":"unknown","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":51,"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"managed":{"additionalProperties":false,"properties":{"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"declaration_verification":{"const":"managed-declaration-only","type":"string"},"import_name":{"minLength":1,"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","member_token","member_name","import_name","import_scope_name","no_mangle","char_set","call_convention","declaration_verification"],"type":"object"},"matched_native":{"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"},"maxItems":100,"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"},"maxItems":51,"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"managed":{"additionalProperties":false,"properties":{"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"declaration_verification":{"const":"managed-declaration-only","type":"string"},"import_name":{"minLength":1,"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","member_token","member_name","import_name","import_scope_name","no_mangle","char_set","call_convention","declaration_verification"],"type":"object"},"matched_native":{"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"}]},"maxItems":50000,"type":"array"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"contradicted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inferred":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_body_unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["verified","inferred","unresolved","contradicted","native_body_unresolved"],"type":"object"},"verification_id":{"pattern":"^mnv_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","verification_id","algorithm","managed_boundary","native_observations","summary","pinvoke_imports","native_implementations","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Verify Managed Native Boundaries"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Import decompiler-produced managed reconstruction against authenticated inspect_managed_members Evidence. The workflow locks each method to artifact SHA-256, MVID, metadata token, signature hash, and the limited member-result-v1 decoded-IL tuple hash, records the decompiler identity and options, and marks C# or pseudocode as analyst inference rather than canonical byte observation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"decompiler":{"executable_sha256":null,"family":"ilspy","name":"ilspycmd","options":["--disable-updatecheck","--type","Example.Program"],"version":"9.1.0.7988"},"methods":[{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","reconstruction":{"end_line":1,"kind":"decompiled-csharp","language":"csharp","source_path":"/examples/Example.Program.cs","start_line":1,"text":"internal static void Main() { }"},"signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"}],"notes":["Synthetic example only; decompiler output is imported as inference."],"static_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"properties":{"decompiler":{"additionalProperties":false,"description":"Value for decompiler.","properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of executable."},"family":{"description":"Value for family.","enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"description":"Value for options.","items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["name","version","family","executable_sha256"],"type":"object"},"methods":{"description":"Value for methods.","items":{"additionalProperties":false,"properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"reconstruction":{"additionalProperties":false,"description":"Value for reconstruction.","properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for end line."},"kind":{"description":"Value for kind.","enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"description":"Value for language.","enum":["csharp","il","pseudocode"],"type":"string"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Local filesystem path for source."},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for start line."},"text":{"description":"Value for text.","maxLength":65536,"minLength":1,"type":"string"},"text_sha256":{"description":"Exact SHA-256 digest of text.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text"],"type":"object"},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256","reconstruction"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"default":[],"description":"Value for notes.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["decompiler","methods","static_members_evidence_id"],"type":"object"},"kind":"application","name":"import_managed_reconstruction","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"decompiler":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"family":{"enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"options_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["name","version","family","executable_sha256","options","options_sha256"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"methods":{"items":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reconstruction":{"additionalProperties":false,"properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"kind":{"enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"enum":["csharp","il","pseudocode"],"type":"string"},"line_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"text":{"maxLength":65536,"minLength":1,"type":"string"},"text_length":{"maximum":65536,"minimum":1,"type":"integer"},"text_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text","text_sha256","text_length","line_count","source_path","start_line","end_line"],"type":"object"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"validation":{"additionalProperties":false,"properties":{"canonical_observation":{"const":false,"type":"boolean"},"confidence_floor":{"const":"inference","type":"string"},"exact_build_required":{"const":true,"type":"boolean"},"matched_static_member":{"const":true,"type":"boolean"}},"required":["matched_static_member","exact_build_required","canonical_observation","confidence_floor"],"type":"object"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","reconstruction","validation"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"phase":{"const":"reconstruction-import","type":"string"},"reconstruction_id":{"pattern":"^mre_[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"static_observation":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","artifact_path","byte_length","module_name","mvid","metadata_status"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"decompiled_csharp_methods":{"maximum":50,"minimum":0,"type":"integer"},"decompiled_il_methods":{"maximum":50,"minimum":0,"type":"integer"},"imported_methods":{"maximum":50,"minimum":1,"type":"integer"},"pseudocode_methods":{"maximum":50,"minimum":0,"type":"integer"},"total_text_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["imported_methods","decompiled_csharp_methods","decompiled_il_methods","pseudocode_methods","total_text_bytes"],"type":"object"}},"required":["schema_version","reconstruction_id","phase","executed","static_observation","decompiler","summary","methods","notes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Import Managed Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Prepare a separately authorized managed runtime-correlation admission plan from authenticated inspect_managed_members Evidence. The operation is default-disabled, requires the managed_runtime permission ceiling and grant, locks the exact artifact SHA-256, MVID, method signature, and limited member-result-v1 decoded-IL tuple hash, distinguishes attach/load/debugger/reflection/instrumentation effects, and records that no target code was executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"bounds":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"host":{"architecture":"x86_64","clr_family":"dotnet","os":"linux"},"method":{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"},"requested_effect":"attach","static_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"properties":{"bounds":{"additionalProperties":false,"default":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"description":"Value for bounds.","properties":{"allow_network":{"const":false,"default":false,"description":"Value for allow network.","type":"boolean"},"allow_ui":{"const":false,"default":false,"description":"Value for allow ui.","type":"boolean"},"max_output_bytes":{"default":65536,"description":"Maximum permitted output bytes for this operation.","maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"description":"Maximum permitted threads for this operation.","maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"type":"object"},"host":{"additionalProperties":false,"description":"Value for host.","properties":{"architecture":{"description":"Value for architecture.","enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"description":"Value for clr family.","enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"description":"Value for os.","enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"method":{"additionalProperties":false,"description":"Value for method.","properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256"],"type":"object"},"requested_effect":{"description":"Value for requested effect.","enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["method","requested_effect","host","static_members_evidence_id"],"type":"object"},"kind":"application","name":"plan_managed_runtime_correlation","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"authority_model":{"additionalProperties":false,"properties":{"capability":{"const":"managed_runtime","type":"string"},"default_enabled":{"const":false,"type":"boolean"},"per_call_approval_required":{"const":true,"type":"boolean"},"permission_grant_id":{"minLength":1,"type":"string"}},"required":["capability","permission_grant_id","default_enabled","per_call_approval_required"],"type":"object"},"bounds":{"additionalProperties":false,"properties":{"allow_network":{"const":false,"default":false,"type":"boolean"},"allow_ui":{"const":false,"default":false,"type":"boolean"},"max_output_bytes":{"default":65536,"maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"maximum":60000,"minimum":1,"type":"integer"}},"required":["timeout_ms","max_threads","max_output_bytes","allow_network","allow_ui"],"type":"object"},"correlation_id":{"pattern":"^mrc_[a-f0-9]{64}$","type":"string"},"effect_taxonomy":{"additionalProperties":false,"properties":{"attaches_process":{"type":"boolean"},"instruments_code":{"type":"boolean"},"invokes_target_code":{"const":false,"type":"boolean"},"loads_target":{"type":"boolean"},"uses_debugger":{"type":"boolean"},"uses_reflection":{"type":"boolean"}},"required":["attaches_process","loads_target","uses_debugger","uses_reflection","instruments_code","invokes_target_code"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"method_lock":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"body_status":{"enum":["present","partial","absent","malformed","too-large"],"type":"string"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"exact_build_required":{"const":true,"type":"boolean"},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","body_status","exact_build_required"],"type":"object"},"phase":{"const":"admission-plan","type":"string"},"requested_runtime":{"additionalProperties":false,"properties":{"effect":{"enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"executable_path":{"minLength":1,"type":"string"},"filesystem":{"const":"owned-artifacts-only","type":"string"},"host":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"network":{"const":"none","type":"string"}},"required":["effect","host","executable_path","network","filesystem"],"type":"object"},"schema_version":{"const":1,"type":"number"},"static_observation":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","artifact_path","byte_length","module_name","mvid","metadata_status"],"type":"object"},"unsupported_until_executor_exists":{"const":true,"type":"boolean"}},"required":["schema_version","correlation_id","phase","executed","authority_model","static_observation","method_lock","requested_runtime","effect_taxonomy","bounds","unsupported_until_executor_exists","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Plan Managed Runtime Correlation"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Project authenticated managed artifact, member, and native-boundary Evidence into the provider-neutral application graph without executing managed code, loading assemblies, or translating managed metadata tokens to native addresses. The graph preserves managed static observations as managed-specific nodes linked to source Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"limits":{"additionalProperties":false,"default":{"max_fields":5000,"max_methods":10000,"max_native_implementations":5000,"max_pinvoke_imports":5000,"max_types":5000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_fields":{"default":5000,"description":"Maximum permitted fields for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_methods":{"default":10000,"description":"Maximum permitted methods for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_native_implementations":{"default":5000,"description":"Maximum permitted native implementations for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_pinvoke_imports":{"default":5000,"description":"Maximum permitted pinvoke imports for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_types":{"default":5000,"description":"Maximum permitted types for this operation.","maximum":100000,"minimum":0,"type":"integer"}},"type":"object"},"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_artifact_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"additionalProperties":false,"default":{"max_fields":5000,"max_methods":10000,"max_native_implementations":5000,"max_pinvoke_imports":5000,"max_types":5000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_fields":{"default":5000,"description":"Maximum permitted fields for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_methods":{"default":10000,"description":"Maximum permitted methods for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_native_implementations":{"default":5000,"description":"Maximum permitted native implementations for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_pinvoke_imports":{"default":5000,"description":"Maximum permitted pinvoke imports for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_types":{"default":5000,"description":"Maximum permitted types for this operation.","maximum":100000,"minimum":0,"type":"integer"}},"type":"object"},"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_members_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"additionalProperties":false,"default":{"max_fields":5000,"max_methods":10000,"max_native_implementations":5000,"max_pinvoke_imports":5000,"max_types":5000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_fields":{"default":5000,"description":"Maximum permitted fields for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_methods":{"default":10000,"description":"Maximum permitted methods for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_native_implementations":{"default":5000,"description":"Maximum permitted native implementations for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_pinvoke_imports":{"default":5000,"description":"Maximum permitted pinvoke imports for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_types":{"default":5000,"description":"Maximum permitted types for this operation.","maximum":100000,"minimum":0,"type":"integer"}},"type":"object"},"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_native_boundaries_evidence_id"],"type":"object"}],"examples":[{"limits":{"max_fields":100,"max_methods":100,"max_native_implementations":100,"max_pinvoke_imports":100,"max_types":100},"managed_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"type":"object"},"kind":"application","name":"project_managed_application_graph","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_native_implementations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_pinvoke_imports":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_types":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","omitted_types","omitted_methods","omitted_fields","omitted_pinvoke_imports","omitted_native_implementations"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3,"minItems":1,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"projection_id":{"pattern":"^magp_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"source_evidence":{"additionalProperties":false,"properties":{"managed_artifact_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"managed_members_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"managed_native_boundaries_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["managed_artifact_evidence_id","managed_members_evidence_id","managed_native_boundaries_evidence_id"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"assemblies":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_implementations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_imports":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"types":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["graph_nodes","graph_edges","assemblies","modules","types","methods","fields","pinvoke_imports","native_implementations"],"type":"object"}},"required":["schema_version","projection_id","root_artifact_sha256","source_evidence","summary","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Project Managed Application Graph"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List bounded page targets from an approved user-owned loopback Chrome DevTools Protocol endpoint. Only targets whose current URL matches an approved exact origin are returned; URL credentials, query values, and fragments are redacted.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","limit":100,"offset":0}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["cdp_endpoint","allowed_origins","approved"],"type":"object"},"kind":"browser-provider","name":"list_browser_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"excluded":{"additionalProperties":false,"properties":{"disallowed_origin":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"non_page":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["disallowed_origin","unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"origin":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Browser Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one approved page target through CDP without evaluating JavaScript, navigating, clicking, closing, or mutating the page. Returns bounded DOM structure, accessibility, scripts, resources, attach-window network and console metadata, workers, and redacted storage inventory as Evidence v2.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":false,"default":false,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved"],"type":"object"}],"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","console_text_approved":false,"include_accessibility_text":false,"include_console_text":false,"include_json_body_shapes":false,"include_script_sources":false,"include_storage_fingerprints":false,"include_storage_keys":false,"include_websocket_shapes":false,"json_body_schema_approved":false,"limits":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"observation_ms":500,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS","websocket_shape_approved":false}],"type":"object"},"kind":"browser-provider","name":"inspect_web_page","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"accessibility":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"ignored":{"type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"node_id":{"type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"states":{"default":[],"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}]}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored","states"],"type":"object"},"type":"array"},"text_capture":{"additionalProperties":false,"properties":{"excluded_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"properties":{"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"items":{"additionalProperties":false,"properties":{"argument_types":{"items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"text_capture":{"additionalProperties":false,"properties":{"retained_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"items":{"additionalProperties":false,"properties":{"argument_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"type":{"type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"type":"number"},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"attribute_names":{"items":{"type":"string"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"type":"string"},"node_type":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"items":{"additionalProperties":false,"properties":{"frame_id":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"agent_hints":{"items":{"additionalProperties":false,"properties":{"declaration":{"type":"string"},"mechanism":{"enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"items":{"additionalProperties":false,"properties":{"attribute":{"enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"type":"boolean"},"responses":{"items":{"additionalProperties":false,"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"csp":{"additionalProperties":false,"properties":{"directives":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"sources":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"items":{"additionalProperties":false,"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}]},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}]},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}]},"rel":{"items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"policies":{"additionalProperties":false,"properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}]},"coop":{"anyOf":[{"type":"string"},{"type":"null"}]},"corp":{"anyOf":[{"type":"string"},{"type":"null"}]},"permissions_policy_features":{"items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}]},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"type":"string"},"url":{"type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"type":"boolean"},"requests":{"items":{"additionalProperties":false,"properties":{"body_shapes":{"additionalProperties":false,"properties":{"request":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"response":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"status":{"enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"initiator":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","url","line","column"],"type":"object"},"method":{"type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"url":{"type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"items":{"additionalProperties":false,"properties":{"direction":{"enum":["sent","received"],"type":"string"},"opcode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"additionalProperties":false,"properties":{"format":{"enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}]},"request_id":{"type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"mime_type":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_key":{"pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"is_module":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_reconciliation":{"oneOf":[{"additionalProperties":false,"properties":{"resource_key":{"type":"string"},"status":{"const":"exact","type":"string"}},"required":["status","resource_key"],"type":"object"},{"additionalProperties":false,"properties":{"candidate_resource_keys":{"items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"const":"no_exact_sanitized_url","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["script_key","frame_id","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"additionalProperties":false,"properties":{"cache_names":{"items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"items":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"identity_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","type":"string"},"fingerprints_complete":{"default":false,"type":"boolean"},"indexed_db_names":{"items":{"type":"string"},"type":"array"},"local_storage_keys":{"items":{"type":"string"},"type":"array"},"origin":{"type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"session_storage_keys":{"items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"values_redacted":{"const":true,"type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","content_fingerprints","fingerprint_algorithm","fingerprints_complete","values_redacted"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"origin":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"target_id":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","url","origin","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Web Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture explicitly approved JavaScript source from one approved CDP page and statically derive a bounded chunk graph, route and endpoint candidates, vendor fingerprints, page-declared WebMCP metadata, and optional separately approved source-map evidence. JavaScript is parsed but never executed.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"analysis_limits":{"default":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"description":"Value for analysis limits.","properties":{"max_ast_nodes":{"default":250000,"description":"Maximum permitted ast nodes for this operation.","maximum":2000000,"minimum":1,"type":"integer"},"max_findings":{"default":1000,"description":"Maximum permitted findings for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_original_sources":{"default":2000,"description":"Maximum permitted original sources for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_source_map_bytes":{"default":4194304,"description":"Maximum permitted source map bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_source_map_mappings":{"default":10000,"description":"Maximum permitted source map mappings for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_source_maps":{"default":100,"description":"Maximum permitted source maps for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_total_source_map_bytes":{"default":16777216,"description":"Maximum permitted total source map bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"}},"type":"object"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"fetch_source_maps":{"const":false,"default":false,"description":"Value for fetch source maps.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"source_map_fetch_approved":{"const":false,"default":false,"description":"Explicit operator approval for source map fetch.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"analysis_limits":{"default":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"description":"Value for analysis limits.","properties":{"max_ast_nodes":{"default":250000,"description":"Maximum permitted ast nodes for this operation.","maximum":2000000,"minimum":1,"type":"integer"},"max_findings":{"default":1000,"description":"Maximum permitted findings for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_original_sources":{"default":2000,"description":"Maximum permitted original sources for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_source_map_bytes":{"default":4194304,"description":"Maximum permitted source map bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_source_map_mappings":{"default":10000,"description":"Maximum permitted source map mappings for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_source_maps":{"default":100,"description":"Maximum permitted source maps for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_total_source_map_bytes":{"default":16777216,"description":"Maximum permitted total source map bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"}},"type":"object"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"fetch_source_maps":{"const":true,"description":"Value for fetch source maps.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"source_map_fetch_approved":{"const":true,"description":"Explicit operator approval for source map fetch.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved","fetch_source_maps","source_map_fetch_approved"],"type":"object"}],"examples":[{"allowed_origins":["https://app.example.test"],"analysis_limits":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","fetch_source_maps":false,"include_accessibility_text":false,"include_script_sources":true,"include_storage_keys":false,"observation_ms":500,"source_capture_approved":true,"source_map_fetch_approved":false,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"type":"object"},"kind":"browser-provider","name":"analyze_web_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"capture":{"additionalProperties":false,"properties":{"scripts_analyzed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_artifacts":{"items":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text_available":{"const":true,"type":"boolean"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text_available"],"type":"object"},"type":"array"},"target_url":{"type":"string"}},"required":["target_url","scripts_observed","scripts_analyzed","source_artifacts"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"dropped_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete_within_limits","truncated","partial"],"type":"string"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","parsed_scripts","parse_failures","visited_ast_nodes","dropped_findings"],"type":"object"},"inferences":{"items":{"additionalProperties":false,"properties":{"basis":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"detector":{"type":"string"},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","artifact_sha256","line","column","detector"],"type":"object"},"minItems":1,"type":"array"},"confidence":{"enum":["low","medium","high"],"type":"string"},"kind":{"enum":["vendor_fingerprint","route_framework","bundle_runtime"],"type":"string"},"value":{"type":"string"}},"required":["kind","value","confidence","basis"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observations":{"additionalProperties":false,"properties":{"chunks":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"from_script_key":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require","worker_import"],"type":"string"},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"resolved_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_script_key","kind","specifier","resolved_url","location"],"type":"object"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"script_key":{"type":"string"},"url":{"type":"string"}},"required":["script_key","url","artifact_sha256","bytes"],"type":"object"},"type":"array"}},"required":["nodes","edges"],"type":"object"},"endpoints":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"routes":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"source_maps":{"additionalProperties":false,"properties":{"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dropped_script_keys":{"items":{"type":"string"},"type":"array"},"items":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"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":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"source":{"type":"string"}},"required":["source","artifact"],"type":"object"},"type":"array"},"script_key":{"type":"string"},"status":{"const":"included","type":"string"}},"required":["script_key","declared_url","artifact","original_sources","original_module_edges","mappings","status","limitation"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"declared_url":{"type":"string"},"limitation":{"type":"string"},"mappings":{"items":{"additionalProperties":false,"properties":{"generated_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"generated_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"original_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"type":"string"}},"required":["generated_line","generated_column","source","original_line","original_column","name"],"type":"object"},"type":"array"},"original_module_edges":{"items":{"additionalProperties":false,"properties":{"from_source":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require"],"type":"string"},"resolved_source":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_source","kind","specifier","resolved_source"],"type":"object"},"type":"array"},"original_sources":{"items":{"additionalProperties":false,"properties":{"artifact":{"anyOf":[{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"source":{"type":"string"}},"required":["source","artifact"],"type":"object"},"type":"array"},"script_key":{"type":"string"},"status":{"const":"truncated","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":{"prefixItems":[],"type":"array"},"original_module_edges":{"prefixItems":[],"type":"array"},"original_sources":{"prefixItems":[],"type":"array"},"script_key":{"type":"string"},"status":{"enum":["fetch_failed","invalid","policy_filtered","truncated"],"type":"string"}},"required":["script_key","declared_url","status","artifact","original_sources","original_module_edges","mappings","limitation"],"type":"object"}]},"type":"array"},"processed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_requested","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","requested","processed","dropped","dropped_script_keys","items"],"type":"object"},"webmcp_declarations":{"items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"schema_property_names":{"items":{"type":"string"},"type":"array"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["name","description","schema_property_names","trust","location"],"type":"object"},"type":"array"}},"required":["chunks","routes","endpoints","webmcp_declarations","source_maps"],"type":"object"},"schema_version":{"const":1,"type":"number"},"unknowns":{"items":{"additionalProperties":false,"properties":{"affected_script_keys":{"items":{"type":"string"},"type":"array"},"dimension":{"type":"string"},"reason":{"type":"string"}},"required":["dimension","reason","affected_script_keys"],"type":"object"},"type":"array"}},"required":["schema_version","capture","observations","inferences","unknowns","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Web Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Arm a bounded CDP observation window while the user operates the page. Allows approved same-origin reload and SPA navigation, records ordered navigation, redirect, lifecycle, and failure metadata, and stops before retaining an out-of-policy destination.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_timeline_events":2000,"observation_ms":10000,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_timeline_events":{"default":2000,"description":"Maximum permitted timeline events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"observation_ms":{"default":10000,"description":"Value for observation ms.","maximum":60000,"minimum":1,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"observe_web_session","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"target":{"additionalProperties":false,"properties":{"final_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"initial_url":{"type":"string"},"target_id":{"type":"string"}},"required":["target_id","initial_url","final_url"],"type":"object"},"timeline":{"items":{"additionalProperties":false,"properties":{"destination_scope":{"anyOf":[{"enum":["approved","outside_policy","unsupported"],"type":"string"},{"type":"null"}]},"detail":{"anyOf":[{"type":"string"},{"type":"null"}]},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"loader_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timestamp":{"minimum":0,"type":"number"},"type":{"enum":["navigation_requested","navigation_committed","same_origin_reload","same_document_navigation","redirect","load_failed","lifecycle","target_terminated"],"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sequence","type","timestamp","frame_id","loader_id","request_id","url","destination_scope","detail"],"type":"object"},"type":"array"},"window":{"additionalProperties":false,"properties":{"armed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"end_reason":{"enum":["window_elapsed","target_left_scope","target_terminated"],"type":"string"},"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"requested_ms":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["armed_at","ended_at","requested_ms","end_reason"],"type":"object"}},"required":["schema_version","browser","target","window","timeline","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Observe Web Session"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inventory page-registered WebMCP tools using the experimental CDP WebMCP domain. Metadata is bounded and page-declared-untrusted; REA never registers or invokes discovered tools.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_schema_bytes":262144,"max_schema_depth":20,"max_schema_nodes":5000,"max_tools":500,"observation_ms":100,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_schema_bytes":{"default":262144,"description":"Maximum permitted schema bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_schema_depth":{"default":20,"description":"Maximum permitted schema depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_schema_nodes":{"default":5000,"description":"Maximum permitted schema nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_tools":{"default":500,"description":"Maximum permitted tools for this operation.","maximum":5000,"minimum":1,"type":"integer"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"discover_webmcp_tools","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"status":{"enum":["available","unavailable"],"type":"string"},"target":{"additionalProperties":false,"properties":{"origin":{"type":"string"},"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"enum":["declarative","imperative"],"type":"string"},"description":{"type":"string"},"frame_id":{"type":"string"},"frame_url":{"type":"string"},"input_schema_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"name":{"type":"string"},"owner_origin":{"type":"string"},"registration_source":{"anyOf":[{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"url":{"type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}]},"tool_key":{"pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Discover Webmcp Tools"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare either passive web captures or step-indexed browser scenarios. Scenario comparison aligns exact step IDs, records deterministic literal normalization, and exposes bounded artifact-level changes plus alignment failures. Missing or truncated evidence never proves equality.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"after":{"description":"Later passive web-page capture.","properties":{"inspection":{"description":"Value for inspection.","properties":{"accessibility":{"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"properties":{"body_shapes":{"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"scripts":{"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"properties":{"artifact":{"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"},"webmcp":{"anyOf":[{"properties":{"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["available","unavailable"],"type":"string"},"target":{"description":"Value for target.","properties":{"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"properties":{"annotations":{"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"before":{"description":"Earlier passive web-page capture.","properties":{"inspection":{"description":"Value for inspection.","properties":{"accessibility":{"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"properties":{"body_shapes":{"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"scripts":{"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"properties":{"artifact":{"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"},"webmcp":{"anyOf":[{"properties":{"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["available","unavailable"],"type":"string"},"target":{"description":"Value for target.","properties":{"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"properties":{"annotations":{"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"max_changes":{"default":2000,"description":"Maximum normalized change records to retain.","maximum":20000,"minimum":1,"type":"integer"}},"required":["before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after_scenario":{"additionalProperties":false,"description":"Later browser scenario capture.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","maxLength":1024,"minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","maxLength":65536,"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":"Bounded 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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","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.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":4096,"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"before_scenario":{"additionalProperties":false,"description":"Earlier browser scenario capture.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","maxLength":1024,"minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","maxLength":65536,"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":"Bounded 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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","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.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":4096,"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"max_changes":{"default":2000,"description":"Maximum normalized change records to retain.","maximum":20000,"minimum":1,"type":"integer"},"normalization":{"additionalProperties":false,"default":{"rules":[]},"description":"Exact-literal normalization policy.","properties":{"rules":{"default":[],"description":"Value for rules.","items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"}},"type":"object"}},"required":["before_scenario","after_scenario"],"type":"object"}],"examples":[{"after_scenario":{"browser":{"cleanup":"disconnected-external","mode":"connect","process_ownership":"external","product":"Chromium","version":"149"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"duration_ms":10,"events":{"dropped":0,"items":[],"retained":0},"limitations":[],"scenario":{"action_count":1,"allowed_origins":["https://app.example.test"],"secret_references":[],"start_origin":"https://app.example.test"},"schema_version":1,"steps":[{"action":"scenario_start","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":0,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"scenario_start","step_index":0},{"action":"click","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":10,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"open-settings","step_index":1}]},"before_scenario":{"browser":{"cleanup":"disconnected-external","mode":"connect","process_ownership":"external","product":"Chromium","version":"149"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"duration_ms":10,"events":{"dropped":0,"items":[],"retained":0},"limitations":[],"scenario":{"action_count":1,"allowed_origins":["https://app.example.test"],"secret_references":[],"start_origin":"https://app.example.test"},"schema_version":1,"steps":[{"action":"scenario_start","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":0,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"scenario_start","step_index":0},{"action":"click","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":10,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"open-settings","step_index":1}]},"max_changes":2000,"normalization":{"rules":[{"artifacts":["dom","accessibility"],"match":"build-123","replacement":"[BUILD_ID]","rule_id":"volatile-build-id"}]}}],"type":"object"},"kind":"browser-provider","name":"compare_web_captures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"after_only":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"aligned_steps":{"maximum":129,"minimum":0,"type":"integer"},"before_only":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"failures":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate_before_step_id","duplicate_after_step_id","missing_before_step","missing_after_step","action_mismatch","capture_context_mismatch"],"type":"string"},"reason":{"maxLength":2048,"minLength":1,"type":"string"},"step_id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["code","step_id","reason"],"type":"object"},"maxItems":520,"type":"array"},"status":{"enum":["aligned","partial","failed"],"type":"string"}},"required":["status","aligned_steps","before_only","after_only","failures"],"type":"object"},"artifact_diffs":{"additionalProperties":false,"properties":{"omitted":{"maximum":1032,"minimum":0,"type":"integer"},"retained":{"maximum":1032,"minimum":0,"type":"integer"},"total":{"maximum":1032,"minimum":0,"type":"integer"}},"required":["total","retained","omitted"],"type":"object"},"comparison_kind":{"const":"browser_scenario","type":"string"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"normalization":{"additionalProperties":false,"properties":{"built_in_rules":{"items":{"enum":["ignore_step_elapsed_ms","ignore_event_sequence","ignore_event_step_index","compare_screenshot_content_digest","compare_normalized_text_content"],"type":"string"},"maxItems":5,"minItems":5,"type":"array"},"rules":{"items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["built_in_rules","rules","sha256"],"type":"object"},"overall_status":{"enum":["changed","unchanged","unknown"],"type":"string"},"schema_version":{"const":1,"type":"number"},"steps":{"items":{"additionalProperties":false,"properties":{"after_action":{"maxLength":64,"minLength":1,"type":"string"},"after_step_index":{"maximum":128,"minimum":0,"type":"integer"},"artifact_diffs":{"items":{"additionalProperties":false,"properties":{"after_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"after_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"artifact":{"enum":["action_state","screenshot","dom","accessibility","url","history","storage","events"],"type":"string"},"before_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"before_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"reason":{"anyOf":[{"maxLength":2048,"minLength":1,"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unknown"],"type":"string"}},"required":["artifact","status","before_state","after_state","before_sha256","after_sha256","reason"],"type":"object"},"maxItems":8,"type":"array"},"before_action":{"maxLength":64,"minLength":1,"type":"string"},"before_step_index":{"maximum":128,"minimum":0,"type":"integer"},"omitted_artifact_diffs":{"maximum":8,"minimum":0,"type":"integer"},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"step_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["step_id","before_step_index","after_step_index","before_action","after_action","status","artifact_diffs","omitted_artifact_diffs"],"type":"object"},"maxItems":129,"type":"array"}},"required":["schema_version","comparison_kind","overall_status","normalization","alignment","steps","artifact_diffs","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"after_target":{"additionalProperties":false,"properties":{"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url"],"type":"object"},"before_target":{"additionalProperties":false,"properties":{"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url"],"type":"object"},"dimensions":{"additionalProperties":false,"properties":{"accessibility":{"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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"}],"default":{"changes":[],"omitted_changes":0,"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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"}],"default":{"changes":[],"omitted_changes":0,"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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","overall_status","before_target","after_target","dimensions","limitations"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Web Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture the current visible viewport of one approved page as a bounded, content-addressed PNG artifact. Screenshot capture requires separate explicit approval and never scrolls, navigates, or evaluates page JavaScript.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","maximum_image_bytes":4194304,"screenshot_approved":true,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"maximum_image_bytes":{"default":4194304,"description":"Bounded byte count for maximum image.","maximum":8388608,"minimum":1,"type":"integer"},"screenshot_approved":{"const":true,"description":"Explicit operator approval for screenshot.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved","screenshot_approved"],"type":"object"},"kind":"browser-provider","name":"capture_web_screenshot","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"captured_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"target":{"additionalProperties":false,"properties":{"origin":{"type":"string"},"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url","origin"],"type":"object"},"viewport":{"additionalProperties":false,"properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["width","height"],"type":"object"}},"required":["schema_version","browser","target","captured_at","viewport","artifact","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Web Screenshot"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare two self-verifying PNG screenshot artifacts with bounded local pixel metrics. Returns exact changed-pixel ratios and channel deltas without OCR or external services.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"after":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"before":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"channel_threshold":0,"maximum_pixels":16000000}],"properties":{"after":{"description":"The later or right-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"before":{"description":"The earlier or left-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"channel_threshold":{"default":0,"description":"Value for channel threshold.","maximum":255,"minimum":0,"type":"integer"},"maximum_pixels":{"default":16000000,"description":"Value for maximum pixels.","maximum":32000000,"minimum":1,"type":"integer"}},"required":["before","after"],"type":"object"},"kind":"browser-provider","name":"compare_web_screenshots","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"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"},"schema_version":{"const":1,"type":"number"},"status":{"const":"identical","type":"string"}},"required":["schema_version","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"},"schema_version":{"const":1,"type":"number"},"status":{"const":"different","type":"string"}},"required":["schema_version","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"},"schema_version":{"const":1,"type":"number"},"status":{"const":"dimension_mismatch","type":"string"}},"required":["schema_version","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_uri"],"type":"object"},"requiresSession":false,"title":"Compare Web Screenshots"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run one approved, bounded browser scenario through Playwright. Launch mode owns and terminates a temporary browser profile; connect mode attaches to one exact loopback CDP target and disconnects without terminating the external browser. Only the fixed action vocabulary is accepted. Navigation, storage, requests, redirects, secrets, redaction, captures, and limits must be declared before execution. Returns step-indexed Evidence with screenshots, DOM, accessibility, URL/history/storage state, runtime events, explicit missing/truncated sections, and equality eligibility.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"action":"wait_for","locator":{"kind":"test_id","value":"application-ready"},"state":"visible","step_id":"ready"}],"allowed_origins":["https://app.example.test"],"approved":true,"browser":{"cleanup":"close-and-delete-profile","executable_path":"/opt/chromium/chrome","headless":true,"mode":"launch","user_data":"temporary-owned"},"capture":{"after_each_step":["screenshot","url","accessibility"],"at_end":["dom","history","storage"],"events":["console","page-errors","network","websockets"]},"environment":{"color_scheme":"light","locale":"en-US","reduced_motion":"reduce","service_workers":"block","timezone":"UTC","viewport":{"device_scale_factor":1,"height":720,"width":1280}},"limits":{"action_timeout_ms":5000,"max_accessibility_nodes":10000,"max_dom_nodes":10000,"max_duration_ms":60000,"max_events":2000,"max_frames":100,"max_popups":10,"max_screenshot_bytes":4194304,"max_screenshots":16,"max_storage_entries":256,"max_total_metadata_bytes":4194304,"max_websockets":100,"max_workers":20,"navigation_timeout_ms":10000},"redaction":{"header_names":["authorization","cookie","proxy-authorization","set-cookie"],"query_parameter_names":[],"secret_values":"replace-with-secret-reference"},"request_replay":{"mode":"disabled"},"schema_version":1,"secrets":[],"start_url":{"query":[],"url":"https://app.example.test/"},"storage":{"cookies":[],"local_storage":[],"session_storage":[]}}],"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"action":{"const":"goto","description":"Value for action.","type":"string"},"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"wait_until":{"description":"Value for wait until.","enum":["commit","domcontentloaded","load"],"type":"string"}},"required":["step_id","action","destination","wait_until"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"click","description":"Value for action.","type":"string"},"button":{"default":"left","description":"Value for button.","enum":["left","middle","right"],"type":"string"},"click_count":{"default":1,"description":"Value for click count.","maximum":3,"minimum":1,"type":"integer"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"fill","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"press","description":"Value for action.","type":"string"},"key":{"description":"Value for key.","maxLength":64,"minLength":1,"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","key"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"select_option","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","enum":["check","uncheck"],"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"state":{"description":"Value for state.","enum":["attached","detached","visible","hidden"],"type":"string"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","state"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for_timeout","description":"Value for action.","type":"string"},"duration_ms":{"description":"Value for duration ms.","maximum":60000,"minimum":1,"type":"integer"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["step_id","action","duration_ms"],"type":"object"}]},"maxItems":128,"minItems":1,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"browser":{"description":"Value for browser.","oneOf":[{"additionalProperties":false,"properties":{"cleanup":{"const":"close-and-delete-profile","description":"Value for cleanup.","type":"string"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":4096,"minLength":1,"type":"string"},"headless":{"const":true,"description":"Value for headless.","type":"boolean"},"mode":{"const":"launch","description":"Operation mode that selects the requested behavior.","type":"string"},"user_data":{"const":"temporary-owned","description":"Value for user data.","type":"string"}},"required":["mode","executable_path","headless","user_data","cleanup"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"cleanup":{"const":"disconnect-only","description":"Value for cleanup.","type":"string"},"mode":{"const":"connect","description":"Operation mode that selects the requested behavior.","type":"string"},"ownership":{"const":"external","description":"Value for ownership.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","cdp_endpoint","target_id","ownership","cleanup"],"type":"object"}]},"capture":{"additionalProperties":false,"description":"Value for capture.","properties":{"after_each_step":{"description":"Value for after each step.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"at_end":{"description":"Value for at end.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"events":{"description":"Value for events.","items":{"enum":["console","page-errors","network","websockets","frames","workers","popups","downloads"],"type":"string"},"type":"array"}},"required":["after_each_step","at_end","events"],"type":"object"},"environment":{"additionalProperties":false,"description":"Value for environment.","properties":{"color_scheme":{"description":"Value for color scheme.","enum":["light","dark","no-preference"],"type":"string"},"locale":{"description":"Value for locale.","maxLength":64,"minLength":2,"pattern":"^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$","type":"string"},"reduced_motion":{"description":"Value for reduced motion.","enum":["reduce","no-preference"],"type":"string"},"service_workers":{"const":"block","description":"Value for service workers.","type":"string"},"timezone":{"description":"Value for timezone.","maxLength":128,"minLength":1,"pattern":"^[A-Za-z0-9_+-]+(?:\\\\/[A-Za-z0-9_+-]+)*$","type":"string"},"viewport":{"additionalProperties":false,"description":"Value for viewport.","properties":{"device_scale_factor":{"default":1,"description":"Value for device scale factor.","maximum":4,"minimum":0.5,"type":"number"},"height":{"description":"Value for height.","maximum":4320,"minimum":240,"type":"integer"},"width":{"description":"Value for width.","maximum":7680,"minimum":320,"type":"integer"}},"required":["width","height"],"type":"object"}},"required":["viewport","locale","timezone","color_scheme","reduced_motion","service_workers"],"type":"object"},"limits":{"additionalProperties":false,"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"description":"Value for action timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"max_accessibility_nodes":{"description":"Maximum permitted accessibility nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_dom_nodes":{"description":"Maximum permitted dom nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_duration_ms":{"description":"Maximum permitted duration ms for this operation.","maximum":300000,"minimum":100,"type":"integer"},"max_events":{"description":"Maximum permitted events for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_frames":{"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_popups":{"description":"Maximum permitted popups for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_screenshot_bytes":{"description":"Maximum permitted screenshot bytes for this operation.","maximum":8388608,"minimum":1,"type":"integer"},"max_screenshots":{"description":"Maximum permitted screenshots for this operation.","maximum":256,"minimum":0,"type":"integer"},"max_storage_entries":{"description":"Maximum permitted storage entries for this operation.","maximum":512,"minimum":0,"type":"integer"},"max_total_metadata_bytes":{"description":"Maximum permitted total metadata bytes for this operation.","maximum":67108864,"minimum":1024,"type":"integer"},"max_websockets":{"description":"Maximum permitted websockets for this operation.","maximum":10000,"minimum":0,"type":"integer"},"max_workers":{"description":"Maximum permitted workers for this operation.","maximum":1000,"minimum":0,"type":"integer"},"navigation_timeout_ms":{"description":"Value for navigation timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["max_duration_ms","action_timeout_ms","navigation_timeout_ms","max_events","max_frames","max_workers","max_popups","max_websockets","max_dom_nodes","max_accessibility_nodes","max_screenshots","max_screenshot_bytes","max_storage_entries","max_total_metadata_bytes"],"type":"object"},"redaction":{"additionalProperties":false,"description":"Value for redaction.","properties":{"header_names":{"description":"Value for header names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"secret_values":{"const":"replace-with-secret-reference","description":"Value for secret values.","type":"string"}},"required":["secret_values"],"type":"object"},"request_replay":{"description":"Value for request replay.","oneOf":[{"additionalProperties":false,"properties":{"mode":{"const":"disabled","description":"Operation mode that selects the requested behavior.","type":"string"}},"required":["mode"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"const":"exact","description":"Operation mode that selects the requested behavior.","type":"string"},"routes":{"description":"Value for routes.","items":{"additionalProperties":false,"properties":{"method":{"description":"Value for method.","enum":["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"],"type":"string"},"request":{"additionalProperties":false,"description":"Value for request.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"response":{"description":"Value for response.","oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]},"headers":{"description":"Value for headers.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+\\\\-.^_`|~0-9A-Za-z]+$","type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["kind","status"],"type":"object"},{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"kind":{"const":"redirect","description":"Value for kind.","type":"string"},"status":{"anyOf":[{"const":301,"type":"number"},{"const":302,"type":"number"},{"const":303,"type":"number"},{"const":307,"type":"number"},{"const":308,"type":"number"}],"description":"Current lifecycle or verification status."}},"required":["kind","status","destination"],"type":"object"}]},"route_id":{"description":"Value for route id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["route_id","method","request","response"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"unmatched":{"description":"Value for unmatched.","enum":["abort","passthrough-approved-origins"],"type":"string"}},"required":["mode","unmatched","routes"],"type":"object"}]},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"secrets":{"default":[],"description":"Value for secrets.","items":{"additionalProperties":false,"properties":{"environment_variable":{"description":"Value for environment variable.","pattern":"^[A-Z_][A-Z0-9_]{0,127}$","type":"string"},"purpose":{"description":"Value for purpose.","enum":["input","storage","request-replay"],"type":"string"},"redaction":{"const":"replace-with-secret-reference","description":"Value for redaction.","type":"string"},"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["secret_id","environment_variable","purpose","redaction"],"type":"object"},"maxItems":64,"type":"array"},"start_url":{"additionalProperties":false,"description":"Value for start url.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"storage":{"additionalProperties":false,"description":"Value for storage.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value","destination","http_only","secure","same_site"],"type":"object"},"maxItems":128,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"}},"type":"object"}},"required":["schema_version","browser","start_url","allowed_origins","environment","actions","storage","request_replay","redaction","capture","limits","approved"],"type":"object"},"kind":"browser-provider","name":"capture_browser_scenario","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"cleanup":{"enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"enum":["launch","connect"],"type":"string"},"process_ownership":{"enum":["provider-owned","external"],"type":"string"},"product":{"maxLength":1024,"minLength":1,"type":"string"},"version":{"maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"prefixItems":[],"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"prefixItems":[],"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":{"prefixItems":[],"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":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"maxLength":65536,"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","type":"string"},"message":{"maxLength":65536,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}]},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"type":"null"},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request","type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"type":"null"},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"response","type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"maximum":599,"minimum":100,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"maxLength":1024,"minLength":1,"type":"string"},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request-failed","type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"maxLength":65536,"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":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"maxLength":1024,"type":"string"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"properties":{"action_count":{"maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"type":"number"},"steps":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"properties":{"accessibility":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"current_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"cookies":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"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":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"prefixItems":[],"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"prefixItems":[],"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":{"prefixItems":[],"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":{"maxLength":64,"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":{"maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"properties":{"accessibility":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"current_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"cookies":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"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":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"prefixItems":[],"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"prefixItems":[],"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":{"prefixItems":[],"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":{"maxLength":4096,"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":{"maxLength":64,"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"}]},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Browser Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List Electron file:// page targets from an approved user-owned loopback CDP endpoint. Every path is canonicalized and must remain contained by an approved filesystem root, including after symlink resolution.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223","limit":100,"offset":0}],"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["cdp_endpoint","allowed_file_roots","approved"],"type":"object"},"kind":"electron-provider","name":"list_electron_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"excluded":{"additionalProperties":false,"properties":{"non_page":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_root":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_root","unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["target_id","type","title","file_path","attached"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Electron Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one approved Electron file page through CDP. Returns root-confined frames, DOM structure, resource paths, and scripts without evaluating renderer JavaScript or invoking Electron APIs; script contents require separate approval.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"limits":{"default":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":500,"description":"Maximum permitted scripts for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":false,"default":false,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved","target_id"],"type":"object"},{"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"include_script_sources":{"const":true,"description":"Whether to include script sources in the result.","type":"boolean"},"limits":{"default":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":500,"description":"Maximum permitted scripts for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved","target_id","include_script_sources","source_capture_approved"],"type":"object"}],"examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":false,"limits":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"observation_ms":100,"source_capture_approved":false,"target_id":"TARGET_ID_FROM_LIST_ELECTRON_TARGETS"}],"type":"object"},"kind":"electron-provider","name":"inspect_electron_page","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"properties":{"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"dom":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"attribute_names":{"items":{"type":"string"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"type":"string"},"node_type":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"items":{"additionalProperties":false,"properties":{"file_path":{"type":"string"},"frame_id":{"type":"string"},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["frame_id","parent_frame_id","file_path"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"resources":{"items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"file_path":{"type":"string"},"mime_type":{"type":"string"},"resource_key":{"pattern":"^electron_resource_[a-f0-9]{64}$","type":"string"},"type":{"type":"string"}},"required":["resource_key","file_path","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":1,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"type":"string"},"file_path":{"type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"is_module":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"script_key":{"pattern":"^electron_script_[a-f0-9]{64}$","type":"string"},"source":{"oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]}},"required":["script_key","frame_id","file_path","cdp_hash","length","is_module","language","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["target_id","type","title","file_path","attached"],"type":"object"},"workers":{"default":[],"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"opener_target_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"target_id":{"maxLength":256,"minLength":1,"type":"string"},"type":{"maxLength":100,"minLength":1,"type":"string"}},"required":["target_id","type","file_path","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","scripts","resources","workers","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Electron Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Statically reconstruct one approved local ASAR or extracted JavaScript application without executing it. The default summary returns architecture/security counts, top evidence-backed findings, unknowns, and paged graph resource URIs; request detail=full only when the complete graph must be returned immediately. Identical inputs are deterministic, so do not repeat the call or reread full Evidence without a specific missing detail.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"detail":"summary","format":"auto","input_path":"/Applications/Example.app/Contents/Resources/app.asar","source_map_read_approved":false}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"detail":{"default":"summary","description":"summary returns bounded findings and paged graph resource URIs; full returns the complete graph only when explicitly required","enum":["summary","full"],"type":"string"},"format":{"default":"auto","description":"Declared input artifact format.","enum":["auto","asar","directory"],"type":"string"},"input_path":{"description":"Local filesystem path for input.","maxLength":16384,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_artifact_entry_bytes":134217728,"max_ast_nodes":2000000,"max_compression_ratio":1000,"max_depth":64,"max_entries":8000,"max_findings":8000,"max_modules":20000,"max_parse_milliseconds":30000,"max_path_bytes":4096,"max_source_map_sources":5000,"max_text_file_bytes":8388608,"max_text_files":5000,"max_total_artifact_bytes":536870912,"max_total_text_bytes":134217728},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_artifact_entry_bytes":{"default":134217728,"description":"Maximum permitted artifact entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_ast_nodes":{"default":2000000,"description":"Maximum permitted ast nodes for this operation.","maximum":20000000,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":64,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_entries":{"default":8000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_findings":{"default":8000,"description":"Maximum permitted findings for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_modules":{"default":20000,"description":"Maximum permitted modules for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_parse_milliseconds":{"default":30000,"description":"Maximum permitted parse milliseconds for this operation.","maximum":300000,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_source_map_sources":{"default":5000,"description":"Maximum permitted source map sources for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_text_file_bytes":{"default":8388608,"description":"Maximum permitted text file bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"},"max_text_files":{"default":5000,"description":"Maximum permitted text files for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_total_artifact_bytes":{"default":536870912,"description":"Maximum permitted total artifact bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_total_text_bytes":{"default":134217728,"description":"Maximum permitted total text bytes for this operation.","maximum":536870912,"minimum":1,"type":"integer"}},"type":"object"},"source_map_read_approved":{"default":false,"description":"Explicit operator approval for source map read.","type":"boolean"}},"required":["input_path","approved"],"type":"object"},"kind":"electron-provider","name":"analyze_javascript_application","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"node_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_kinds":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"}},"required":["kind","count"],"type":"object"},"type":"array"},"pages":{"additionalProperties":false,"properties":{"edges":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"nodes":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"page_limit":{"maximum":500,"minimum":1,"type":"integer"}},"required":["nodes","edges","page_limit"],"type":"object"},"roots":{"additionalProperties":false,"properties":{"items":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["items","total","truncated"],"type":"object"},"top_findings":{"items":{"additionalProperties":false,"properties":{"authority":{"type":"string"},"confidence":{"type":"string"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"$ref":"#/$defs/__schema0"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"state":{"type":"string"}},"required":["node_id","kind","label","authority","state","confidence","location"],"type":"object"},"type":"array"}},"required":["graph_id","node_count","edge_count","roots","node_kinds","top_findings","coverage","limitations","pages"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","summary","statistics","limitations","unknowns","graph"],"type":"object"},{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"node_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_kinds":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"}},"required":["kind","count"],"type":"object"},"type":"array"},"pages":{"additionalProperties":false,"properties":{"edges":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"nodes":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"page_limit":{"maximum":500,"minimum":1,"type":"integer"}},"required":["nodes","edges","page_limit"],"type":"object"},"roots":{"additionalProperties":false,"properties":{"items":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["items","total","truncated"],"type":"object"},"top_findings":{"items":{"additionalProperties":false,"properties":{"authority":{"type":"string"},"confidence":{"type":"string"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"$ref":"#/$defs/__schema0"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"state":{"type":"string"}},"required":["node_id","kind","label","authority","state","confidence","location"],"type":"object"},"type":"array"}},"required":["graph_id","node_count","edge_count","roots","node_kinds","top_findings","coverage","limitations","pages"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":2,"type":"number"},"semantic_graph":{"additionalProperties":false,"properties":{"coverage":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"fingerprints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query_tool":{"const":"trace_javascript_semantics","type":"string"},"relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_frontiers":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["graph_id","nodes","relations","unknown_frontiers","fingerprints","coverage","query_tool"],"type":"object"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","summary","statistics","limitations","unknowns","graph","semantic_graph"],"type":"object"}]},{"oneOf":[{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","graph","summary","statistics","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":2,"type":"number"},"semantic_graph":{"additionalProperties":false,"properties":{"application_graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"families":{"items":{"additionalProperties":false,"properties":{"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"retained_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial","unknown","unsupported"],"type":"string"},"unknown_ids":{"items":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["family","status","retained_relations","omitted_relations","unknown_ids"],"type":"object"},"maxItems":12,"minItems":12,"type":"array"},"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_nodes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_nodes","omitted_relations","limits","families"],"type":"object"},"fingerprints":{"items":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea.javascript-semantic-function/v1","type":"string"},"components":{"additionalProperties":false,"properties":{"control_flow_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"effects":{"items":{"enum":["async","child-process","event","network","promise","resource","timer"],"type":"string"},"maxItems":7,"type":"array"},"literal_set_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"normalized_ast_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameter_arity":{"maximum":10000,"minimum":0,"type":"integer"},"relation_shape_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["parameter_arity","normalized_ast_sha256","control_flow_sha256","relation_shape_sha256","literal_set_sha256","effects"],"type":"object"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"fingerprint_id":{"pattern":"^jsrg_fingerprint_[a-f0-9]{64}$","type":"string"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"function_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["function_node_id","algorithm","status","components","limitations","evidence","fingerprint_id","fingerprint_sha256"],"type":"object"},"maxItems":20000,"type":"array"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"root_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptSemanticRelationGraph","type":"string"},"schema_version":{"const":1,"type":"number"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["schema","schema_version","root_artifact_sha256","application_graph_id","root_node_ids","nodes","relations","fingerprints","unknowns","coverage","limitations","graph_id"],"type":"object"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","graph","summary","statistics","limitations","semantic_graph"],"type":"object"}]}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Javascript Application"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Reconcile verified static JavaScript application graphs with existing passive web/Electron CDP, passive V8 Inspector, or provider-owned active Electron Evidence. Active Electron captures contribute an explicitly partial target-only runtime record; they never invent renderer scripts, frames, workers, or execution claims. Exact captured-source digests take priority over caller-declared file/URL mappings; target, frame, script, and worker ambiguity remains explicit, and source-map authority stays separate.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"runtime_observations":[{"authority":"external-service","confidence":"observed","environment":null,"evidence_id":"ev_e9ffe953ecde3cee6f8b1e2e2fc8be64bf58d17b3c680d1230587294f6b02c3a","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"browser":{"js_version":"1","product":"Electron/example","protocol_version":"1.3","revision":"example","user_agent":"Electron example"},"capture_window":{"ended_at":"2026-07-15T00:00:00.100Z","observation_ms":100,"started_at":"2026-07-15T00:00:00.000Z"},"completeness":{"attach_limited_sections":[],"conditions":["complete_within_window"],"dropped_events":{"console_events":0,"network_requests":0,"scripts":0,"timeline_events":0,"total":0,"webmcp_tools":0,"websocket_connections":0,"websocket_frames":0},"excluded":[],"policy_filtered_sections":[],"status":"complete_within_window","truncated_sections":[],"unavailable_sections":[]},"dom":{"nodes":[],"total_nodes":0},"frames":[],"limitations":["Example passive capture."],"resources":[],"schema_version":1,"scripts":{"items":[{"cdp_hash":"example","file_path":"/Applications/Example.app/Contents/Resources/app/renderer.js","frame_id":null,"is_module":true,"language":"JavaScript","length":29,"script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","source":{"artifact":{"bytes":29,"charset":"utf-8","media_type":"text/javascript","sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","text":"export const example = true;\\n","uri":"rea://web-content/sha256/c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"included":true}}],"total":1},"target":{"attached":false,"file_path":"/Applications/Example.app/Contents/Resources/app/index.html","target_id":"example-target","title":"Example","type":"page"},"workers":[]},"operation":"inspect_electron_page","parameters":{"allowed_file_roots":["/Applications/Example.app/Contents/Resources/app"],"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":true,"source_capture_approved":true,"target_id":"example-target"},"predicate_type":"rea.electron-page-inspection/v1","provider":{"id":"rea-cdp-electron","name":"REA Electron file-page CDP observation provider","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"static_layers":[{"analysis":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_9f1239eec535ee47ca0af92a544b16a3b4be7ce7478e0a7a6b6201b91cc39d5c","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_361585714eb0138287533474fede3727b19167348e3843c577f82b68337c7234","limitations":[],"nodes":[{"identity":{"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","stability":"global-exact","strategy":"content-digest"},"kind":"javascript-asset","node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","observations":[{"evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"artifact-bytes","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":[],"extractor":{"executable_sha256":null,"name":"rea-javascript-application","operation":"inventory-relevant-file","version":"1"},"limitations":[],"location":{"available":true,"value":{"kind":"artifact-path","path":"renderer.js"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"renderer.js","observation_id":"jag_observation_20b4d076ce370db14ae2b477915624c62e0c4a0c9e56803a2c5cb4fa60c16230","properties":{"bytes":29,"path":"renderer.js"}}]}],"root_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"schema":"JavaScriptApplicationGraph","schema_version":1},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","schema_version":1,"statistics":{"findings":0,"invalid_utf8_files":0,"limit_omitted_text_files":0,"modules":0,"nested_asar_containers":0,"omitted_text_files":0,"parse_failures":0,"parsed_javascript_files":1,"policy_filtered_text_files":0,"relevant_files":1,"text_bytes_read":29,"text_files_selected":1,"truncated_scopes":0,"visited_ast_nodes":1},"summary":{"browser_windows":0,"context_bridge_apis":0,"explicit_web_preferences":0,"exposed_api_members":0,"ipc":{"ambiguous_renderer_transmissions":0,"dynamic_channel_operations":0,"literal_channels":0,"main_handlers":0,"operations":0,"paired_renderer_transmissions":0,"renderer_listeners":0,"renderer_transmissions":0,"unpaired_literal_renderer_transmissions":0},"native_addon_bindings":0,"preload_entrypoints":0,"resolved_native_addon_bindings":0,"resolved_utility_entrypoints":0,"sender_validation_observations":0,"utility_processes":0}},"operation":"analyze_javascript_application","parameters":{"approved":true,"source_map_read_approved":false},"predicate_type":"rea.javascript-application-analysis/v1","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"schema_version":2,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"role":"application"}]}],"properties":{"limits":{"additionalProperties":false,"default":{"max_reconciliation_items":20000,"max_runtime_entities":10000,"max_static_load_states":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_reconciliation_items":{"default":20000,"description":"Maximum permitted reconciliation items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_runtime_entities":{"default":10000,"description":"Maximum permitted runtime entities for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_static_load_states":{"default":20000,"description":"Maximum permitted static load states for this operation.","maximum":50000,"minimum":1,"type":"integer"}},"type":"object"},"runtime_observations":{"description":"Value for runtime observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"static_layers":{"description":"Value for static layers.","items":{"additionalProperties":false,"properties":{"analysis":{"additionalProperties":false,"description":"Value for analysis.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"role":{"description":"Value for role.","enum":["application","cache","assets"],"type":"string"},"runtime_mappings":{"default":[],"description":"Value for runtime mappings.","items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"file-root","description":"Value for kind.","type":"string"},"root":{"description":"Value for root.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","description":"Value for kind.","type":"string"},"prefix":{"description":"Value for prefix.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["role","analysis"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"}},"required":["static_layers","runtime_observations"],"type":"object"},"kind":"electron-provider","name":"reconcile_javascript_runtime","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"omitted_graph_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_reconciliation_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_runtime_entities":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_static_load_states":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_runtime_entities","omitted_reconciliation_items","omitted_static_load_states","omitted_graph_items"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":40,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"reconciliation_id":{"pattern":"^jrr_[a-f0-9]{64}$","type":"string"},"reconciliations":{"items":{"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":800000,"minimum":0,"type":"integer"},"candidate_static_nodes":{"items":{"additionalProperties":false,"properties":{"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["static_layer_id","static_node_id"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"entity_kind":{"enum":["target","frame","script","worker"],"type":"string"},"reason":{"enum":["content-and-location-match","unique-content-match","unique-location-match","ambiguous-static-candidates","captured-content-disagrees-with-static-location","no-static-content-match","no-authorized-location-mapping","runtime-frame-unattributed","static-or-runtime-coverage-incomplete","reconciliation-limit-reached"],"type":"string"},"reconciliation_id":{"pattern":"^jrr_item_[a-f0-9]{64}$","type":"string"},"runtime_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"runtime_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"static_layer_id":{"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":800000,"minimum":0,"type":"integer"},"candidate_static_nodes":{"items":{"additionalProperties":false,"properties":{"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["static_layer_id","static_node_id"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"entity_kind":{"enum":["target","frame","script","worker"],"type":"string"},"reason":{"enum":["content-and-location-match","unique-content-match","unique-location-match","ambiguous-static-candidates","captured-content-disagrees-with-static-location","no-static-content-match","no-authorized-location-mapping","runtime-frame-unattributed","static-or-runtime-coverage-incomplete","reconciliation-limit-reached"],"type":"string"},"reconciliation_id":{"pattern":"^jrr_item_[a-f0-9]{64}$","type":"string"},"runtime_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"runtime_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"static_layer_id":{"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"}]},"maxItems":50000,"type":"array"},"runtime_captures":{"items":{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["browser","electron","v8-inspector","electron-active"],"type":"string"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts_complete_within_scope":{"type":"boolean"},"target_key":{"maxLength":4096,"minLength":1,"type":"string"},"target_location":{"maxLength":4096,"minLength":1,"type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["evidence_id","capture_sha256","kind","target_node_id","target_key","target_location","frames","scripts","workers","scripts_complete_within_scope"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"schema_version":{"const":1,"type":"number"},"source_map_authority":{"additionalProperties":false,"properties":{"limitation":{"maxLength":4096,"minLength":1,"type":"string"},"runtime_script_declarations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_layers_with_read_approval":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"used_for_primary_matching":{"const":false,"type":"boolean"}},"required":["used_for_primary_matching","static_layers_with_read_approval","runtime_script_declarations","limitation"],"type":"object"},"static_layers":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"format":{"enum":["asar","directory"],"type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"role":{"enum":["application","cache","assets"],"type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_mappings":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"file-root","type":"string"},"root":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root","artifact_prefix"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","type":"string"},"prefix":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix","artifact_prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["layer_id","role","evidence_id","graph_id","root_artifact_sha256","input_path","format","runtime_mappings"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"},"static_load_states":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["javascript-asset","javascript-chunk","javascript-module"],"type":"string"},"reason":{"enum":["runtime-script-correspondence","containing-asset-was-loaded","not-observed-in-bounded-capture","layer-outside-runtime-scope","static-or-runtime-coverage-incomplete"],"type":"string"},"runtime_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"type":"array"},"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["loaded","resident-in-loaded-asset","not-observed-in-capture","unknown"],"type":"string"}},"required":["static_layer_id","static_node_id","kind","status","runtime_node_ids","reason"],"type":"object"},"maxItems":50000,"type":"array"},"summary":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"matched":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_targets":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_loaded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_not_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_resident":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["runtime_targets","runtime_frames","runtime_scripts","runtime_workers","matched","ambiguous","unmatched","unknown","static_loaded","static_resident","static_not_observed","static_unknown"],"type":"object"}},"required":["schema_version","reconciliation_id","static_layers","runtime_captures","graph","summary","reconciliations","static_load_states","source_map_authority","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Reconcile Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Use this for an explicitly approved, provider-owned Electron run when passive CDP or Inspector observation cannot exercise application behavior. REA owns startup and teardown, accepts bounded click/wait actions plus window-targeted renderer reload/crash and synthetic open-url/second-instance delivery, and returns correlated window/WebContents/process/preload/session/navigation/shell/IPC evidence without retaining payload values. Results identify observed and unavailable event families, coverage status, action targets, and truncation. External shell, navigation, permission, download, popup, updater, and OS-integration effects are blocked and recorded. Use passive Electron tools for observation-only work.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"kind":"click","selector":"#run","step_id":"exercise-ipc"}],"application_path":"/Applications/Example.app/Contents/Resources/main.js","application_root":"/Applications/Example.app/Contents/Resources","approved":true,"args":[],"executable_path":"/Applications/Electron.app/Contents/MacOS/Electron","limits":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_windows":32},"schema_version":1}],"properties":{"actions":{"default":[],"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"click","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":512,"minLength":1,"type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","selector"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"wait","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","duration_ms"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-reload","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-crash","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"delivery":{"description":"Value for delivery.","enum":["open-url","second-instance"],"type":"string"},"kind":{"const":"deep-link","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"url":{"description":"Value for url.","maxLength":4096,"minLength":1,"type":"string"}},"required":["step_id","kind","delivery","url"],"type":"object"}]},"maxItems":100,"type":"array"},"application_path":{"description":"Local filesystem path for application.","maxLength":16384,"minLength":1,"type":"string"},"application_root":{"description":"Approved canonical filesystem application root.","maxLength":16384,"minLength":1,"type":"string"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"args":{"default":[],"description":"Value for args.","items":{"maxLength":4096,"type":"string"},"maxItems":32,"type":"array"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":16384,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_runtime_events":5000,"max_windows":32},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"default":5000,"description":"Value for action timeout ms.","maximum":30000,"minimum":1,"type":"integer"},"max_actions":{"default":20,"description":"Maximum permitted actions for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_duration_ms":{"default":60000,"description":"Maximum permitted duration ms for this operation.","maximum":120000,"minimum":1,"type":"integer"},"max_ipc_events":{"default":2000,"description":"Maximum permitted ipc events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_processes":{"default":32,"description":"Maximum permitted processes for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_runtime_events":{"default":5000,"description":"Maximum permitted runtime events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_windows":{"default":32,"description":"Maximum permitted windows for this operation.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","executable_path","application_path","application_root","approved"],"type":"object"},"kind":"electron-provider","name":"capture_electron_scenario","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"actions":{"items":{"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":{"maxLength":128,"minLength":1,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":99,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","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":{"maxLength":128,"minLength":1,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":99,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","elapsed_ms","status","error"],"type":"object"}]},"maxItems":100,"type":"array"},"application":{"additionalProperties":false,"properties":{"application_path":{"maxLength":16384,"minLength":1,"type":"string"},"cleanup":{"const":"terminated-owned-process","type":"string"},"electron_version":{"maxLength":256,"minLength":1,"type":"string"},"executable_path":{"maxLength":16384,"minLength":1,"type":"string"},"process_ownership":{"const":"provider-owned","type":"string"}},"required":["executable_path","application_path","electron_version","process_ownership","cleanup"],"type":"object"},"coverage":{"additionalProperties":false,"default":{"observed_event_families":[],"observed_roles":[],"pre_capture_activity":"unavailable","status":"partial_attach","unavailable_event_families":[]},"properties":{"observed_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"},"observed_roles":{"items":{"maxLength":128,"type":"string"},"maxItems":16,"type":"array"},"pre_capture_activity":{"const":"unavailable","type":"string"},"status":{"enum":["complete","partial_attach","capture_truncated","hook_conflict","target_exited","cleanup_failed"],"type":"string"},"unavailable_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"}},"required":["status","observed_event_families","unavailable_event_families","observed_roles","pre_capture_activity"],"type":"object"},"ipc":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"default":false,"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"capture_method":{"default":"api-wrapper","enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"default":false,"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message"],"type":"string"},"phase":{"anyOf":[{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},{"type":"null"}]},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"default":"electron-active-hook","maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","channel","channel_truncated","frame","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":10000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"processes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"service_name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"type":{"maxLength":128,"minLength":1,"type":"string"}},"required":["pid","type","name","service_name"],"type":"object"},"maxItems":100,"type":"array"},"truncated":{"type":"boolean"}},"required":["items","truncated"],"type":"object"},"schema_version":{"const":1,"type":"number"},"timeline":{"additionalProperties":false,"default":{"events":[],"observed":0,"retained":0,"truncated":false},"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"capture_method":{"enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message","app-lifecycle","window-lifecycle","web-contents-lifecycle","navigation","shell-attempt","process-lifecycle","permission","popup-attempt","download","protocol","preload","native-addon","updater","error"],"type":"string"},"phase":{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","event","phase","channel","channel_truncated","direction","sender","receiver","frame","target","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":20000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"windows":{"items":{"additionalProperties":false,"properties":{"destroyed":{"type":"boolean"},"title":{"maxLength":16384,"type":"string"},"url":{"maxLength":65536,"type":"string"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"web_contents_id":{"maxLength":256,"type":"string"},"window_id":{"maxLength":256,"type":"string"}},"required":["window_id","web_contents_id","url","title","visible","destroyed"],"type":"object"},"maxItems":100,"type":"array"},"windows_truncated":{"type":"boolean"}},"required":["schema_version","application","actions","windows","windows_truncated","processes","ipc","timeline","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Electron Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List attachable Node/Electron V8 Inspector targets from one approved literal-loopback endpoint. Only targets inside exact canonical file roots or exact HTTP(S) origins are retained; excluded target locations never enter Evidence.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229","limit":100,"offset":0}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["inspector_endpoint","approved"],"type":"object"},"kind":"runtime-provider","name":"list_javascript_runtime_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unconnectable":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","unconnectable"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","runtime","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Javascript Runtime Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Attach passively to one exact approved Node/Electron V8 Inspector target and capture bounded Debugger.scriptParsed plus Runtime execution-context events. REA sends only Runtime.enable and Debugger.enable: it never evaluates, pauses, resumes, reads source, or instruments the target. require/import edges, EventEmitter activity, and Electron IPC remain explicit unknowns; reconcile the returned Evidence with static Application Graph Evidence using reconcile_javascript_runtime.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229","limits":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"observation_ms":100,"runtime_kind":"node","target_id":"TARGET_ID_FROM_LIST_JAVASCRIPT_RUNTIME_TARGETS"}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_events":{"default":10000,"description":"Maximum permitted events for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_execution_contexts":{"default":1000,"description":"Maximum permitted execution contexts for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_location_bytes":{"default":16384,"description":"Maximum permitted location bytes for this operation.","maximum":65536,"minimum":64,"type":"integer"},"max_scripts":{"default":2000,"description":"Maximum permitted scripts for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_metadata_bytes":{"default":4194304,"description":"Maximum permitted total metadata bytes for this operation.","maximum":33554432,"minimum":1024,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"runtime_kind":{"description":"Value for runtime kind.","enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["inspector_endpoint","approved","target_id","runtime_kind"],"type":"object"},"kind":"runtime-provider","name":"observe_javascript_runtime","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"capture":{"additionalProperties":false,"properties":{"events_dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_bytes_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"},"truncation_reasons":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"}},"required":["observation_ms","events_observed","events_retained","events_dropped","metadata_bytes_retained","truncated","truncation_reasons"],"type":"object"},"directly_observed":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"execution_contexts":{"items":{"additionalProperties":false,"properties":{"context_key":{"maxLength":64,"minLength":1,"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}]},"state":{"enum":["created","destroyed","cleared"],"type":"string"}},"required":["context_key","state","name","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"schema_version":{"const":1,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"invalid_protocol_value":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","invalid_protocol_value"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}]},"execution_context_key":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"is_module":{"type":"boolean"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"script_key":{"pattern":"^v8_script_[a-f0-9]{64}$","type":"string"},"status":{"const":"observed-loaded","type":"string"}},"required":["script_key","location","execution_context_key","cdp_hash","length","is_module","status"],"type":"object"},"type":"array"},"observed_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","observed_total","excluded"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"runtime_kind":{"enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"runtime_kind_authority":{"const":"caller-declared-unverified","type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location","runtime_kind","runtime_kind_authority"],"type":"object"},"unavailable_without_instrumentation":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["schema_version","runtime","target","capture","scripts","execution_contexts","directly_observed","unavailable_without_instrumentation","unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Observe Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a typed literal seed through an authenticated JavaScript Application Graph supplied as full Evidence or an Evidence ID returned earlier in this session. Explicit direction, depth, node, edge, and path bounds apply. Original static, native, passive-runtime, inferred, and unknown authorities remain distinct; native addon handoffs never open a provider or execute the application.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"direction":{"default":"both","description":"Direction in which to traverse or compare relationships.","enum":["outgoing","incoming","both"],"type":"string"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_nodes":2000,"max_paths":100,"max_seed_matches":25},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_paths":{"default":100,"description":"Maximum permitted paths for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"native_observations":{"default":[],"description":"Value for native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"seed":{"additionalProperties":false,"description":"Value for seed.","properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"kind":{"description":"Value for kind.","enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null,"description":"Value for match."},"value":{"description":"Value for value.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"}},"required":["seed","application"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"direction":{"default":"both","description":"Direction in which to traverse or compare relationships.","enum":["outgoing","incoming","both"],"type":"string"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_nodes":2000,"max_paths":100,"max_seed_matches":25},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_paths":{"default":100,"description":"Maximum permitted paths for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"native_observations":{"default":[],"description":"Value for native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"seed":{"additionalProperties":false,"description":"Value for seed.","properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"kind":{"description":"Value for kind.","enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null,"description":"Value for match."},"value":{"description":"Value for value.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"}},"required":["seed","application_evidence_id"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","direction":"both","seed":{"case_sensitive":false,"kind":"module","match":"exact","value":"renderer.js"}}],"type":"object"},"kind":"application","name":"trace_application_feature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"frontier_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"type":"array"},"omitted_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_paths":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scanned_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-source","partial","truncated","no-match"],"type":"string"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","source_graph_status","scanned_nodes","total_seed_matches","omitted_seed_matches","omitted_nodes","omitted_edges","omitted_paths","frontier_node_ids"],"type":"object"},"direction":{"enum":["outgoing","incoming","both"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":65,"minItems":1,"type":"array"},"graph":{"anyOf":[{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"native_handoffs":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"export_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"native_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"maxItems":64,"type":"array"},"recommended_tools":{"items":{"enum":["open_binary","binary_overview","search_procedures","analyze_function","xrefs"],"type":"string"},"maxItems":5,"type":"array"},"requested_exports":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"status":{"enum":["evidence-linked","requires-provider-analysis"],"type":"string"}},"required":["native_node_id","artifact_sha256","artifact_path","export_node_ids","requested_exports","status","providers","evidence_ids","recommended_tools"],"type":"object"},"maxItems":10000,"type":"array"},"paths":{"items":{"additionalProperties":false,"properties":{"authorities":{"items":{"maxLength":128,"minLength":1,"type":"string"},"maxItems":16,"type":"array"},"contains_inference":{"type":"boolean"},"edge_ids":{"items":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"end_kind":{"maxLength":128,"minLength":1,"type":"string"},"end_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":65,"minItems":1,"type":"array"},"path_id":{"pattern":"^jatp_[a-f0-9]{64}$","type":"string"},"start_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["path_id","start_node_id","end_node_id","end_kind","node_ids","edge_ids","authorities","contains_inference"],"type":"object"},"maxItems":1000,"type":"array"},"schema_version":{"const":1,"type":"number"},"seed":{"additionalProperties":false,"properties":{"case_sensitive":{"default":false,"type":"boolean"},"kind":{"enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null},"value":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value","match","case_sensitive"],"type":"object"},"seed_matches":{"items":{"additionalProperties":false,"properties":{"basis":{"enum":["node-id","label","identity","property"],"type":"string"},"field":{"maxLength":256,"minLength":1,"type":"string"},"kind":{"maxLength":128,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","kind","basis","field"],"type":"object"},"maxItems":1000,"type":"array"},"source_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"source_graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"summary":{"additionalProperties":false,"properties":{"inferred_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"matched_seeds":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_handoffs":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observed_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"terminal_paths":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traced_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traced_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unavailable_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["matched_seeds","traced_nodes","traced_edges","terminal_paths","native_handoffs","observed_facts","inferred_facts","unknown_facts","unavailable_facts"],"type":"object"},"trace_id":{"pattern":"^jatr_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","trace_id","source_evidence_id","source_graph_id","seed","direction","seed_matches","graph","paths","native_handoffs","summary","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Application Feature"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace bounded static JavaScript data-flow, direct call/return, and closure relations from authenticated analyze_javascript_application v2 Evidence. Queries declare direction and exact node, relation, depth, function, module, and page limits. Dynamic or unsupported semantics remain explicit unknowns; static reachability never claims runtime execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"query":{"additionalProperties":false,"description":"Non-empty feature or text query to investigate.","properties":{"allowed_relations":{"description":"Value for allowed relations.","items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":44,"minItems":1,"type":"array"},"cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"Value for cursor."},"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"expected":{"anyOf":[{"additionalProperties":false,"properties":{"classes":{"description":"Value for classes.","items":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"maxItems":24,"minItems":1,"type":"array"},"role":{"description":"Value for role.","enum":["source","sink"],"type":"string"}},"required":["role","classes"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for expected."},"include_ambiguous_dynamic_edges":{"default":false,"description":"Whether to include ambiguous dynamic edges in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_functions":500,"max_modules":500,"max_nodes":2000,"max_seed_matches":25,"max_unknowns":1000,"page_size":200},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"description":"Maximum permitted functions for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"description":"Maximum permitted modules for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"description":"Maximum permitted unknowns for this operation.","maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"description":"Value for page size.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"seed":{"description":"Value for seed.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","description":"Value for kind.","type":"string"},"value":{"$ref":"#/$defs/__schema0","description":"Value for value."}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"description":"Exact SHA-256 digest of fingerprint.","pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]},"source_map_authority":{"additionalProperties":false,"default":{"authority":"none"},"description":"Value for source map authority.","properties":{"authority":{"const":"none","description":"Value for authority.","type":"string"}},"required":["authority"],"type":"object"}},"required":["seed","direction"],"type":"object"}},"required":["application","query"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"query":{"additionalProperties":false,"description":"Non-empty feature or text query to investigate.","properties":{"allowed_relations":{"description":"Value for allowed relations.","items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":44,"minItems":1,"type":"array"},"cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"Value for cursor."},"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"expected":{"anyOf":[{"additionalProperties":false,"properties":{"classes":{"description":"Value for classes.","items":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"maxItems":24,"minItems":1,"type":"array"},"role":{"description":"Value for role.","enum":["source","sink"],"type":"string"}},"required":["role","classes"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for expected."},"include_ambiguous_dynamic_edges":{"default":false,"description":"Whether to include ambiguous dynamic edges in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_functions":500,"max_modules":500,"max_nodes":2000,"max_seed_matches":25,"max_unknowns":1000,"page_size":200},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"description":"Maximum permitted functions for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"description":"Maximum permitted modules for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"description":"Maximum permitted unknowns for this operation.","maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"description":"Value for page size.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"seed":{"description":"Value for seed.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","description":"Value for kind.","type":"string"},"value":{"$ref":"#/$defs/__schema0","description":"Value for value."}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"description":"Exact SHA-256 digest of fingerprint.","pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]},"source_map_authority":{"additionalProperties":false,"default":{"authority":"none"},"description":"Value for source map authority.","properties":{"authority":{"const":"none","description":"Value for authority.","type":"string"}},"required":["authority"],"type":"object"}},"required":["seed","direction"],"type":"object"}},"required":["application_evidence_id","query"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","query":{"direction":"backward-provenance","seed":{"kind":"semantic-node","node_id":"jsrg_node_0000000000000000000000000000000000000000000000000000000000000000"},"source_map_authority":{"authority":"none"}}}],"type":"object"},"kind":"application","name":"trace_javascript_semantics","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"accepted_limit_ranges":{"additionalProperties":false,"properties":{"max_depth":{"additionalProperties":false,"properties":{"maximum":{"const":64,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_edges":{"additionalProperties":false,"properties":{"maximum":{"const":100000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_functions":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_modules":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_nodes":{"additionalProperties":false,"properties":{"maximum":{"const":50000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_seed_matches":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_unknowns":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"page_size":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"applied_limits":{"additionalProperties":false,"properties":{"max_depth":{"default":12,"maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"maximum":1000,"minimum":1,"type":"integer"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"frontier":{"items":{"additionalProperties":false,"properties":{"depth":{"maximum":65,"minimum":0,"type":"integer"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"reason":{"enum":["max-depth","max-edges","max-functions","max-modules","max-nodes","max-seed-matches"],"type":"string"}},"required":["node_id","depth","reason"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"enum":["complete","partial","truncated","unavailable"],"type":"string"}},"required":["status","frontier"],"type":"object"},"direction":{"enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"expected_match_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":3000,"type":"array"},"page":{"additionalProperties":false,"properties":{"next_cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"size":{"maximum":1000,"minimum":0,"type":"integer"}},"required":["offset","size","next_cursor"],"type":"object"},"query_id":{"pattern":"^jsrq_[a-f0-9]{64}$","type":"string"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":1000,"type":"array"},"schema_version":{"const":1,"type":"number"},"seed":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","type":"string"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","type":"string"},"value":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","type":"string"}},"required":["kind","field"],"type":"object"}]},"seed_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"source_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"source_graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"status":{"enum":["found","no-match","ambiguous","partial","truncated","unsupported"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"relevant_unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_unknowns":{"maximum":10000,"minimum":0,"type":"integer"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_functions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_seed_matches","retained_seed_matches","traversed_nodes","traversed_relations","traversed_functions","traversed_modules","relevant_unknowns","retained_unknowns"],"type":"object"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["schema_version","query_id","source_graph_id","seed","direction","status","seed_node_ids","nodes","relations","unknowns","expected_match_node_ids","summary","coverage","page","applied_limits","accepted_limit_ranges","limitations","source_evidence_id","evidence_links"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Javascript Semantics"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two authenticated JavaScript Application Graph versions supplied as full Evidence or Evidence IDs returned earlier in this session. Uses unique-only exact digest, module source digest, source-map identity, structural fingerprint, and non-module semantic-key tiers. Reports added, removed, changed, ambiguous, and unknown entities plus a bounded changed_from graph without fuzzy or module-ordinal pairing.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left","right"],"type":"object"},{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left","right_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"type":"object"},"kind":"application","name":"compare_application_versions","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"comparison_id":{"pattern":"^javc_[a-f0-9]{64}$","type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"const":0,"type":"number"},"omitted_comparison_items":{"const":0,"type":"number"},"omitted_graph_edges":{"const":0,"type":"number"},"omitted_graph_nodes":{"const":0,"type":"number"},"omitted_graph_observations":{"const":0,"type":"number"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"const":"complete-within-inputs","type":"string"}},"required":["left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations","status"],"type":"object"},{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"const":0,"type":"number"},"omitted_comparison_items":{"const":0,"type":"number"},"omitted_graph_edges":{"const":0,"type":"number"},"omitted_graph_nodes":{"const":0,"type":"number"},"omitted_graph_observations":{"const":0,"type":"number"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"const":"partial","type":"string"}},"required":["left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations","status"],"type":"object"},{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_comparison_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"const":"truncated","type":"string"}},"required":["left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations","status"],"type":"object"}]},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"items":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"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":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"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"},"maxItems":1000,"prefixItems":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"}]},"maxItems":50000,"type":"array"},"left":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"matching":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_content_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_module_source_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_node_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"semantic_key":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_map_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural_fingerprint":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["exact_node_identity","exact_content_digest","exact_module_source_digest","source_map_identity","structural_fingerprint","semantic_key","ambiguous","unmatched"],"type":"object"},"right":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","added","removed","changed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","left","right","summary","matching","items","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Application Versions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare a cryptographically committed HistoricalSourceGraph/v1 with authenticated JavaScript Application Graph Evidence supplied directly or by session Evidence ID. Uses explicit exact-digest, source-map path, current-path, suffix, and basename signals with stable weights. Classifies unchanged, modified, removed, split, merged, duplicated, and unknown; incomplete coverage and ambiguous weak signals never become absence or forced matches.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"limits":{"additionalProperties":false,"default":{"max_application_nodes":20000,"max_candidate_evaluations":1000000,"max_candidate_nodes":100,"max_source_files":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_application_nodes":{"default":20000,"description":"Maximum permitted application nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_candidate_evaluations":{"default":1000000,"description":"Maximum permitted candidate evaluations for this operation.","maximum":10000000,"minimum":1,"type":"integer"},"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_source_files":{"default":10000,"description":"Maximum permitted source files for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"reference":{"additionalProperties":false,"description":"Value for reference.","properties":{"authority":{"const":"historical-reference","description":"Value for authority.","type":"string"},"entries":{"description":"Value for entries.","items":{"anyOf":[{"anyOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"const":"hashed","description":"Value for content state.","type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["redacted-secret","excluded","unreadable","too-large","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"tree_state":{"description":"Value for tree state.","enum":["enumerated","partial","excluded","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","tree_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"target":{"description":"Value for target.","maxLength":4096,"minLength":1,"type":"string"},"target_state":{"description":"Value for target state.","enum":["internal","external","missing","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","target","target_state"],"type":"object"}]},"maxItems":100000,"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","enum":["configured-secret","symlink-escape","size-limit","inventory-limit","unreadable","caller-excluded"],"type":"string"}},"required":["path","reason"],"type":"object"},"maxItems":100000,"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"maxLength":100,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"manifests":{"description":"Value for manifests.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":10000,"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","maxLength":100,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"maxItems":10000,"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","maxLength":200,"minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","maxLength":100,"minLength":1,"type":"string"},"importer_version":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for importer version."}},"required":["importer","importer_version","caller"],"type":"object"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"from_path":{"description":"Local filesystem path for from.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"description":"Value for kind.","enum":["imports","requires","references","declares-module"],"type":"string"},"parse_state":{"description":"Value for parse state.","enum":["parsed","partial","unknown"],"type":"string"},"resolution":{"description":"Value for resolution.","enum":["internal","external","unresolved","unknown"],"type":"string"},"to":{"description":"Value for to.","maxLength":4096,"minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"maxItems":200000,"type":"array"},"root_alias":{"const":"$REFERENCE_ROOT","description":"Value for root alias.","type":"string"},"root_sha256":{"description":"Exact SHA-256 digest of root.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema":{"const":"HistoricalSourceGraph/v1","description":"Value for schema.","type":"string"},"vcs":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"dirty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for dirty."},"head":{"description":"Value for head.","pattern":"^(?:[a-f0-9]{40}|[a-f0-9]{64})$","type":"string"},"kind":{"const":"git","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"none","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"unknown","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"}]},{"type":"null"}],"description":"Value for vcs."}},"required":["schema","authority","root_alias","root_sha256","inventory_state","entries","relationships","parse_failures","exclusions","languages","manifests","vcs","provenance","limitations"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["reference","application"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"limits":{"additionalProperties":false,"default":{"max_application_nodes":20000,"max_candidate_evaluations":1000000,"max_candidate_nodes":100,"max_source_files":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_application_nodes":{"default":20000,"description":"Maximum permitted application nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_candidate_evaluations":{"default":1000000,"description":"Maximum permitted candidate evaluations for this operation.","maximum":10000000,"minimum":1,"type":"integer"},"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_source_files":{"default":10000,"description":"Maximum permitted source files for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"reference":{"additionalProperties":false,"description":"Value for reference.","properties":{"authority":{"const":"historical-reference","description":"Value for authority.","type":"string"},"entries":{"description":"Value for entries.","items":{"anyOf":[{"anyOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"const":"hashed","description":"Value for content state.","type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["redacted-secret","excluded","unreadable","too-large","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"tree_state":{"description":"Value for tree state.","enum":["enumerated","partial","excluded","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","tree_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"target":{"description":"Value for target.","maxLength":4096,"minLength":1,"type":"string"},"target_state":{"description":"Value for target state.","enum":["internal","external","missing","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","target","target_state"],"type":"object"}]},"maxItems":100000,"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","enum":["configured-secret","symlink-escape","size-limit","inventory-limit","unreadable","caller-excluded"],"type":"string"}},"required":["path","reason"],"type":"object"},"maxItems":100000,"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"maxLength":100,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"manifests":{"description":"Value for manifests.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":10000,"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","maxLength":100,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"maxItems":10000,"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","maxLength":200,"minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","maxLength":100,"minLength":1,"type":"string"},"importer_version":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for importer version."}},"required":["importer","importer_version","caller"],"type":"object"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"from_path":{"description":"Local filesystem path for from.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"description":"Value for kind.","enum":["imports","requires","references","declares-module"],"type":"string"},"parse_state":{"description":"Value for parse state.","enum":["parsed","partial","unknown"],"type":"string"},"resolution":{"description":"Value for resolution.","enum":["internal","external","unresolved","unknown"],"type":"string"},"to":{"description":"Value for to.","maxLength":4096,"minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"maxItems":200000,"type":"array"},"root_alias":{"const":"$REFERENCE_ROOT","description":"Value for root alias.","type":"string"},"root_sha256":{"description":"Exact SHA-256 digest of root.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema":{"const":"HistoricalSourceGraph/v1","description":"Value for schema.","type":"string"},"vcs":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"dirty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for dirty."},"head":{"description":"Value for head.","pattern":"^(?:[a-f0-9]{40}|[a-f0-9]{64})$","type":"string"},"kind":{"const":"git","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"none","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"unknown","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"}]},{"type":"null"}],"description":"Value for vcs."}},"required":["schema","authority","root_alias","root_sha256","inventory_state","entries","relationships","parse_failures","exclusions","languages","manifests","vcs","provenance","limitations"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["reference","application_evidence_id"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","reference":{"authority":"historical-reference","entries":[{"classifications":["source"],"kind":"directory","limitations":[],"path":"src","tree_state":"enumerated"},{"classifications":["source"],"content_state":"hashed","kind":"file","language":"TypeScript","limitations":[],"path":"src/main.ts","sha256":"2222222222222222222222222222222222222222222222222222222222222222","size":128}],"exclusions":[],"inventory_state":"complete","languages":["TypeScript"],"limitations":[],"manifests":[],"parse_failures":[],"provenance":{"caller":"contract-example","importer":"rea","importer_version":"1"},"relationships":[],"root_alias":"$REFERENCE_ROOT","root_sha256":"683969414c3e674a368392213c78021322fb39609b0c57f346b22da6464b2110","schema":"HistoricalSourceGraph/v1","vcs":{"dirty":null,"head":null,"kind":"none"}}}],"type":"object"},"kind":"application","name":"compare_source_to_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"comparison_id":{"pattern":"^stbc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"application_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"candidate_evaluations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_evaluations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_unmapped_current_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reference_inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"retained_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","reference_inventory_state","application_graph_status","retained_source_files","omitted_source_files","retained_application_nodes","omitted_application_nodes","candidate_evaluations","omitted_candidate_evaluations","omitted_candidate_references","omitted_unmapped_current_nodes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"items":{"items":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["exact","high","medium","low"],"type":"string"},"current_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"current_node_kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"score":{"maximum":300,"minimum":1,"type":"integer"},"signals":{"items":{"additionalProperties":false,"properties":{"current_values":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":64,"minItems":1,"type":"array"},"kind":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"source_value":{"maxLength":4096,"minLength":1,"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["kind","weight","source_value","current_values"],"type":"object"},"maxItems":6,"minItems":1,"type":"array"}},"required":["current_node_id","current_node_kind","score","confidence","signals"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"mapping_id":{"pattern":"^stbc_item_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"source_path":{"maxLength":4096,"minLength":1,"type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"string"}},"required":["mapping_id","source_path","source_sha256","source_language","status","confidence","current_node_ids","candidates","omitted_candidates","limitations"],"type":"object"},"maxItems":100000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"reference":{"additionalProperties":false,"properties":{"inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["root_sha256","inventory_state"],"type":"object"},"schema_version":{"const":1,"type":"number"},"scoring":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea-source-to-bundle-signals/v1","type":"string"},"minimum_candidate_score":{"const":20,"type":"number"},"weights":{"items":{"additionalProperties":false,"properties":{"signal":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["signal","weight"],"type":"object"},"type":"array"}},"required":["algorithm","minimum_candidate_score","weights"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"duplicated":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"merged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modified":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"split":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"object"},"unmapped_current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["schema_version","comparison_id","reference","application","scoring","summary","items","unmapped_current_node_ids","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Source To Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare bounded static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph, supplied as full Evidence or session Evidence IDs. Variants pair only by reciprocal unique literal discriminants; dynamic values, incomplete properties, and ambiguous variants remain unknown. Reports JSON Pointer changes and recommends controlled replay separately without executing JavaScript.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right"],"type":"object"},{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left_evidence_id","right"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left_evidence_id","right_evidence_id"],"type":"object"}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","left_export_name":"default","left_module_path":"parser.mjs","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111","right_export_name":"default","right_module_path":"parser.mjs"}],"type":"object"},"kind":"application","name":"compare_javascript_export_shapes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change_id":{"pattern":"^jesc_change_[a-f0-9]{64}$","type":"string"},"discriminant":{"anyOf":[{"additionalProperties":false,"properties":{"path":{"maxLength":4096,"type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["path","value"],"type":"object"},{"type":"null"}]},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"left_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"path":{"maxLength":4096,"type":"string"},"right":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"right_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"status":{"enum":["added","removed","changed","unknown"],"type":"string"}},"required":["change_id","status","path","discriminant","left","right","left_source_range","right_source_range","evidence_links","limitations"],"type":"object"},"maxItems":10000,"type":"array"},"comparison_id":{"pattern":"^jesc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"left_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"right_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"},"unpaired_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","left_graph_status","right_graph_status","paired_variants","unpaired_left_variants","unpaired_right_variants","omitted_left_variants","omitted_right_variants","left_source_omitted_variants","right_source_omitted_variants","left_omitted_fields","right_omitted_fields","left_omitted_property_coverage","right_omitted_property_coverage","omitted_candidates","omitted_changes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"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"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["added","removed","changed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","left","right","summary","changes","coverage","evidence_links","limitations","runtime_validation"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Javascript Export Shapes"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Plan or execute a content-bound extracted-module JavaScript replay inside the Linux Bubblewrap, seccomp, and cgroup boundary. Execution requires approved: true and the exact plan digest. Supports deterministic boundary cases and optional left/right differential comparison; observations have controlled-replay authority and do not claim real application runtime behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"cases":[{"arguments":[""],"case_id":"empty"}],"determinism":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"left":{"entry_alias":"parser","entry_export":"default","modules":[{"alias":"parser","dependencies":{},"format":"esm","path":"/approved/parser.mjs","role":"module"}]},"limits":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"mode":"plan"}],"oneOf":[{"additionalProperties":false,"properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"execute","description":"Operation mode that selects the requested behavior.","type":"string"},"plan_digest":{"description":"Value for plan digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode","approved","plan_digest"],"type":"object"}],"type":"object"},"kind":"application","name":"run_controlled_replay","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"additionalProperties":false,"properties":{"evidence":{"type":"null"},"phase":{"const":"plan","type":"string"},"plan":{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"maxItems":0,"minItems":0,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"phase":{"const":"execute","type":"string"},"plan":{"type":"null"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"minItems":1,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"}],"type":"object"},"requiresSession":false,"title":"Run Controlled Replay"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Prepare a hash-bound Node/JavaScript characterization plan and deterministic reversible export transformation without executing target code. The exact source, selected byte range, runtime closure, sandbox profile, cases, and limits are committed for separate execution approval.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}],"properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"},"kind":"application","name":"prepare_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"phase":{"const":"preparation","type":"string"},"plan":{"additionalProperties":false,"properties":{"allowed_boundaries":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"properties":{"evidence":{"type":"null"},"phase":{"const":"plan","type":"string"},"plan":{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"maxItems":0,"minItems":0,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},"schema_version":{"const":1,"type":"number"},"transformation":{"additionalProperties":false,"properties":{"artifact_path":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]}},"required":["schema_version","phase","plan","transformation","transformation_evidence","replay"],"type":"object"},"requiresSession":false,"title":"Prepare Node Characterization"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Recompute and execute one separately approved exact Node characterization plan in the owned controlled-replay boundary. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence v2; stale plans fail before execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved_plan_sha256":"0000000000000000000000000000000000000000000000000000000000000000","execution_approved":true,"preparation":{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}}],"properties":{"approved_plan_sha256":{"description":"Exact SHA-256 digest of approved plan.","pattern":"^[a-f0-9]{64}$","type":"string"},"execution_approved":{"const":true,"description":"Explicit operator approval for execution.","type":"boolean"},"preparation":{"additionalProperties":false,"description":"Value for preparation.","properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"}},"required":["execution_approved","approved_plan_sha256","preparation"],"type":"object"},"kind":"application","name":"execute_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"phase":{"const":"execution","type":"string"},"plan":{"additionalProperties":false,"properties":{"allowed_boundaries":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema1"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"phase":{"const":"execute","type":"string"},"plan":{"type":"null"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema1"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"minItems":1,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},"schema_version":{"const":1,"type":"number"},"transformation":{"additionalProperties":false,"properties":{"artifact_path":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]}},"required":["schema_version","phase","plan","transformation","transformation_evidence","evidence","replay"],"type":"object"},"requiresSession":false,"title":"Execute Node Characterization"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Generate one deterministic page of a ReconstructionObligationLedger/v1 from an authenticated Evidence v2 bundle, reviewed obligations, and an explicit reconstruction manifest. Static candidates remain candidates; duplicate ownership, missing original or reconstruction cases, missing parser/type, weak verifier authority, unenumerated claims, contradictions, dependencies, and residual unknowns fail closed. Every page carries the same full-ledger closure digest and typed per-obligation diagnostics.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"limits":{"max_obligations":1000},"manifest":{"bindings":[],"contradictions":[],"schema_version":1},"page":{"limit":50,"offset":0},"reviewed_obligations":[]}],"properties":{"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"limits":{"additionalProperties":false,"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_obligations":{"description":"Maximum permitted obligations for this operation.","maximum":10000,"minimum":1,"type":"integer"}},"required":["max_obligations"],"type":"object"},"manifest":{"additionalProperties":false,"description":"Value for manifest.","properties":{"bindings":{"description":"Value for bindings.","items":{"additionalProperties":false,"properties":{"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"description":"Value for case kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","bindings","contradictions"],"type":"object"},"page":{"additionalProperties":false,"description":"Value for page.","properties":{"limit":{"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"description":"Zero-based index of the first result to return.","maximum":10000,"minimum":0,"type":"integer"}},"required":["offset","limit"],"type":"object"},"reviewed_obligations":{"description":"Value for reviewed obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"disposition":{"description":"Value for disposition.","enum":["active","blocked","out-of-scope"],"type":"string"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"review_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the review observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","application_layer","family","target","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","disposition","review_evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["evidence_bundle","reviewed_obligations","manifest","limits","page"],"type":"object"},"kind":"application","name":"build_reconstruction_obligation_ledger","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"closure_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"max_obligations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"omitted_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","max_obligations"],"type":"object"},"dependency_graph":{"items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"items":{"additionalProperties":false,"properties":{"application_layer":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"},"state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"maxLength":4096,"minLength":1,"type":"string"},"parser":{"maxLength":4096,"minLength":1,"type":"string"},"schema":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}]},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"properties":{"mode":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}]}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}]},"dependency_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"enum":["generated","reviewed"],"type":"string"},"required":{"type":"boolean"},"required_case_kinds":{"items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"type":"boolean"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"location":{"maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":100,"type":"array"},"ownership_graph":{"items":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"page":{"additionalProperties":false,"properties":{"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","limit","total","returned","next_offset"],"type":"object"},"reports":{"additionalProperties":false,"properties":{"contradicted_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","type":"string"},"schema_version":{"const":1,"type":"number"},"status":{"enum":["ready","open","failed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"by_application_layer":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_evidence_authority":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_status":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"required":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_open":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","required","verified","required_open","by_status","by_application_layer","by_evidence_authority"],"type":"object"}},"required":["schema","schema_version","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","evidence_links","limitations","page","obligations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Build Reconstruction Obligation Ledger"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate the fixed nine-stage public reconstruction journey into a deterministic ReconstructionReadinessReport/v1. Exact capability limits, provider routing, CLI/MCP status parity, bounded authority, partial-order comparison, contradictions, obligation closure, cleanup, and replay digests fail closed. Aggregate pass is emitted only when every required stage and check passes with attributable Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"capabilities":[{"authority_scopes":["investigation-input"],"available":true,"bounded":true,"capability_id":"analyze-javascript-application","limits":[{"name":"max-ast-nodes","unit":"count","value":2000000}],"side_effect":"reads-target","unavailable_reason":null}],"cleanup":[{"cancelled":true,"diagnostic_evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"owned_resources_remaining":0,"run_id":"run.cancelled"}],"client":{"name":"synthetic-mcp-client","negotiated_capabilities":["elicitation","progress","resources"],"version":"1"},"closure_history":[{"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","newly_verified_obligation_ids":[],"required_open":1,"sequence":0,"status":"open"},{"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","newly_verified_obligation_ids":["obl.readiness"],"required_open":0,"sequence":1,"status":"ready"}],"comparisons":[{"comparison_id":"comparison.concurrent","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"partial-order","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"equivalent"},{"comparison_id":"comparison.divergence","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":"/events/primary","divergence_refs":["/events/primary"],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"different"},{"comparison_id":"comparison.contradicted","concurrent":false,"contradiction_ids":["contradiction.artifact"],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"unknown"}],"contradictions":[{"affected_comparison_ids":["comparison.contradicted"],"contradiction_id":"contradiction.artifact","declared_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91"],"observed_sha256":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","policy":"record-and-continue"}],"delegation_checks":[{"candidate_id":"candidate.reconstructed","delegates_to_authority":false,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"]}],"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"}],"records":[{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"authority"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"authority"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"schema_version":2,"subject":null},{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"contradiction"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"contradiction"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"scenarios":[{"authority":"controlled-replay","evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","operation":"run_reconstruction_readiness_fixture"},{"authority":"controlled-replay","evidence_id":"ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91","operation":"run_reconstruction_readiness_fixture"}],"unknowns":[]},"fixtures":[{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.native"],"environment_id":"environment.synthetic","fixture_id":"fixture.native","kind":"native"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.javascript-cli"],"environment_id":"environment.synthetic","fixture_id":"fixture.javascript-cli","kind":"javascript-cli"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.electron"],"environment_id":"environment.synthetic","fixture_id":"fixture.electron","kind":"electron"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.incomplete-reconstruction"],"environment_id":"environment.synthetic","fixture_id":"fixture.incomplete-reconstruction","kind":"incomplete-reconstruction"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.broken-runtime"],"environment_id":"environment.synthetic","fixture_id":"fixture.broken-runtime","kind":"broken-runtime"}],"grants":[{"decision":"denied","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"grant_id":"grant.denied","launched_process":false,"scope":"process-capture"},{"decision":"granted","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"grant_id":"grant.session","launched_process":true,"scope":"process-capture"}],"identity":{"catalog_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","cli_version":"2.4.0","providers":[{"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","provider_id":"javascript-application","reason_code":null,"state":"available","version":"1"},{"digest":null,"provider_id":"broken-runtime-probe","reason_code":"host-runtime-linker-failure","state":"broken-host","version":null}],"server_version":"2.4.0","skill_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","versions":[{"component":"rea-cli","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"},{"component":"rea-server","digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","remediation":"Restart the connected MCP server.","state":"stale","version":"2.3.0"},{"component":"rea-server","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"}]},"obligation_ledger":{"closure_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","coverage":{"max_obligations":100,"omitted_count":0,"status":"complete","truncated":false},"dependency_graph":[],"evidence_links":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_id":"rol_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","limitations":[],"obligations":[{"application_layer":"process","authority_references":[{"authority":"controlled-replay","evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","location":"/fixture","state":"observed"}],"binding":{"fixtures":[{"authority":"packaged-process","case_kind":"positive","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.positive"},{"authority":"packaged-process","case_kind":"negative","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.negative"},{"authority":"packaged-process","case_kind":"malformed","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.malformed"},{"authority":"packaged-process","case_kind":"cancellation","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.cancellation"},{"authority":"packaged-process","case_kind":"teardown","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.teardown"}],"obligation_id":"obl.readiness","original_cases":[{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"teardown","location":"/original/teardown"}],"owner":{"module_path":"src/readiness.ts","owner_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","symbol":"runReadiness"},"parser_type":null,"verifier":{"authority":"packaged-process","claim_id":"claim.readiness","command":"npm run verify:readiness","enumerated_obligation_ids":["obl.readiness"],"nondeterminism":{"mode":"partial-order","specification":"Startup precedes teardown."},"result_evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","status":"pass","verifier_id":"verifier.readiness"}},"dependency_obligation_ids":[],"diagnostics":[],"family":"packaged-process-lifecycle","obligation_id":"obl.readiness","obligation_version":1,"observed_cases":[{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"teardown","location":"/original/teardown"}],"origin":"reviewed","required":true,"required_case_kinds":["positive","negative","malformed","cancellation","teardown"],"required_fixture_authority":"packaged-process","required_next_evidence":[],"required_original_authority":"process","required_verifier_authority":"packaged-process","requires_parser_type":false,"residual_unknown_ids":[],"source_state":"observed","status":"verified","target":{"application_node_id":null,"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","location":"/fixture","semantic_node_id":null},"title":"Preserve the packaged readiness fixture lifecycle","unavailable_authority":[]}],"ownership_graph":[{"module_path":"src/readiness.ts","obligation_id":"obl.readiness","symbol":"runReadiness"}],"reports":{"contradicted_obligation_ids":[],"missing_owner_obligation_ids":[],"missing_verifier_obligation_ids":[],"residual_unknown_ids":[]},"schema":"ReconstructionObligationLedger","schema_version":1,"status":"ready","summary":{"by_application_layer":[{"count":0,"key":"cli"},{"count":0,"key":"protocol"},{"count":0,"key":"electron"},{"count":0,"key":"persistence"},{"count":1,"key":"process"},{"count":0,"key":"runtime"},{"count":0,"key":"packaging"},{"count":0,"key":"native-abi"},{"count":0,"key":"application"},{"count":0,"key":"other"}],"by_evidence_authority":[{"count":0,"key":"candidate"},{"count":1,"key":"observed"},{"count":0,"key":"reviewed"},{"count":0,"key":"unknown"}],"by_status":[{"count":0,"key":"unowned"},{"count":0,"key":"characterized"},{"count":0,"key":"implemented"},{"count":1,"key":"verified"},{"count":0,"key":"contradicted"},{"count":0,"key":"blocked"},{"count":0,"key":"out-of-scope"},{"count":0,"key":"unknown"}],"required":1,"required_open":0,"total":1,"verified":1}},"operation_outcomes":[{"call_kind":"valid","cli_exit_code":0,"error_code":null,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":true,"mcp_status":null,"operation":"inspect-artifact","recovered":false,"sequence":0,"surface":"cli"},{"call_kind":"valid","cli_exit_code":null,"error_code":null,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":true,"mcp_status":"success","operation":"inspect-artifact","recovered":false,"sequence":1,"surface":"mcp"},{"call_kind":"permission","cli_exit_code":2,"error_code":"permission-required","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":false,"mcp_status":null,"operation":"capture-process","recovered":true,"sequence":2,"surface":"cli"},{"call_kind":"permission","cli_exit_code":null,"error_code":"permission-required","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":false,"mcp_status":"non-success","operation":"capture-process","recovered":true,"sequence":3,"surface":"mcp"}],"replay":{"deterministic":true,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_source_digest":null,"stale_input_detected":true,"tamper_detected":true},"schema_version":1,"stages":[{"capability_issue":null,"checks":[{"check_id":"target-free-start","detail":"Synthetic conformance proved target-free-start.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"artifact-inventory","detail":"Synthetic conformance proved artifact-inventory.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"compatible-workflow-selected","detail":"Synthetic conformance proved compatible-workflow-selected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"limits-visible","detail":"Synthetic conformance proved limits-visible.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"discover-classify","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"broken-runtime-distinguished","detail":"Synthetic conformance proved broken-runtime-distinguished.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"version-skew-detected","detail":"Synthetic conformance proved version-skew-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"revision-changed-after-recovery","detail":"Synthetic conformance proved revision-changed-after-recovery.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"diagnose-environment","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"missing-scope-reported","detail":"Synthetic conformance proved missing-scope-reported.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"narrow-grant-resumed","detail":"Synthetic conformance proved narrow-grant-resumed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"expansion-reprompted","detail":"Synthetic conformance proved expansion-reprompted.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"denial-launched-nothing","detail":"Synthetic conformance proved denial-launched-nothing.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"acquire-authority","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"native-routed","detail":"Synthetic conformance proved native-routed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"javascript-routed","detail":"Synthetic conformance proved javascript-routed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"unknowns-preserved","detail":"Synthetic conformance proved unknowns-preserved.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"static-analysis","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"predicate-driven","detail":"Synthetic conformance proved predicate-driven.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"descendant-settled","detail":"Synthetic conformance proved descendant-settled.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"electron-correlated","detail":"Synthetic conformance proved electron-correlated.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"cancel-cleanup-preserved-evidence","detail":"Synthetic conformance proved cancel-cleanup-preserved-evidence.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"reactive-scenarios","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"partial-order-accepted","detail":"Synthetic conformance proved partial-order-accepted.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"divergence-localized","detail":"Synthetic conformance proved divergence-localized.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"incomplete-is-unknown","detail":"Synthetic conformance proved incomplete-is-unknown.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"compare-authority-candidate","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"record-and-continue","detail":"Synthetic conformance proved record-and-continue.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"affected-equivalence-blocked","detail":"Synthetic conformance proved affected-equivalence-blocked.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"unaffected-comparison-continued","detail":"Synthetic conformance proved unaffected-comparison-continued.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"preserve-contradictions","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"incomplete-detected","detail":"Synthetic conformance proved incomplete-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"incremental-verifier-closure","detail":"Synthetic conformance proved incremental-verifier-closure.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"delegation-rejected","detail":"Synthetic conformance proved delegation-rejected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"verify-reconstruction-closure","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"cli-mcp-parity","detail":"Synthetic conformance proved cli-mcp-parity.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"failure-status-parity","detail":"Synthetic conformance proved failure-status-parity.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"deterministic-replay","detail":"Synthetic conformance proved deterministic-replay.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"tamper-detected","detail":"Synthetic conformance proved tamper-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"stale-input-detected","detail":"Synthetic conformance proved stale-input-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"export-replay","status":"pass"}],"workflow_candidates":[{"compatibility":"compatible","fixture_id":"fixture.native","invoked":true,"provider_id":"provider.native","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.native"},{"compatibility":"compatible","fixture_id":"fixture.javascript-cli","invoked":true,"provider_id":"provider.javascript-cli","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.javascript-cli"},{"compatibility":"compatible","fixture_id":"fixture.electron","invoked":true,"provider_id":"provider.electron","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.electron"},{"compatibility":"compatible","fixture_id":"fixture.incomplete-reconstruction","invoked":true,"provider_id":"provider.incomplete-reconstruction","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.incomplete-reconstruction"},{"compatibility":"compatible","fixture_id":"fixture.broken-runtime","invoked":true,"provider_id":null,"reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.broken-runtime"}]}],"properties":{"capabilities":{"description":"Value for capabilities.","items":{"additionalProperties":false,"properties":{"authority_scopes":{"description":"Value for authority scopes.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"available":{"description":"Value for available.","type":"boolean"},"bounded":{"description":"Value for bounded.","type":"boolean"},"capability_id":{"description":"Value for capability id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"limits":{"description":"Bounded resource-consumption and result-size limits for this operation.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"unit":{"description":"Value for unit.","enum":["count","bytes","milliseconds","ratio"],"type":"string"},"value":{"description":"Value for value.","minimum":0,"type":"number"}},"required":["name","value","unit"],"type":"object"},"maxItems":100,"type":"array"},"side_effect":{"description":"Value for side effect.","enum":["none","reads-target","launches-process","writes-workspace","network-observation"],"type":"string"},"unavailable_reason":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for unavailable reason."}},"required":["capability_id","available","bounded","side_effect","authority_scopes","limits","unavailable_reason"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"cleanup":{"description":"Value for cleanup.","items":{"additionalProperties":false,"properties":{"cancelled":{"description":"Value for cancelled.","type":"boolean"},"diagnostic_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the diagnostic observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"owned_resources_remaining":{"description":"Value for owned resources remaining.","maximum":9007199254740991,"minimum":0,"type":"integer"},"run_id":{"description":"Value for run id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["run_id","cancelled","owned_resources_remaining","diagnostic_evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"client":{"additionalProperties":false,"description":"Value for client.","properties":{"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"negotiated_capabilities":{"description":"Value for negotiated capabilities.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"version":{"description":"Value for version.","maxLength":4096,"minLength":1,"type":"string"}},"required":["name","version","negotiated_capabilities"],"type":"object"},"closure_history":{"description":"Value for closure history.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"ledger_digest":{"description":"Value for ledger digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"newly_verified_obligation_ids":{"description":"Value for newly verified obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"}},"required":["sequence","ledger_digest","status","required_open","newly_verified_obligation_ids","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":2,"type":"array"},"comparisons":{"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"comparison_id":{"description":"Value for comparison id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"concurrent":{"description":"Value for concurrent.","type":"boolean"},"contradiction_ids":{"description":"Value for contradiction ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"deliberate_divergence_ref":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for deliberate divergence ref."},"divergence_refs":{"description":"Value for divergence refs.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schedule_semantics":{"description":"Value for schedule semantics.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"},"unavailable_authority":{"description":"Value for unavailable authority.","type":"boolean"},"unstable":{"description":"Value for unstable.","type":"boolean"},"verdict":{"description":"Value for verdict.","enum":["equivalent","different","unknown"],"type":"string"}},"required":["comparison_id","verdict","schedule_semantics","concurrent","truncated","unavailable_authority","unstable","deliberate_divergence_ref","divergence_refs","contradiction_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"affected_comparison_ids":{"description":"Value for affected comparison ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"declared_sha256":{"description":"Exact SHA-256 digest of declared.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"observed_sha256":{"description":"Exact SHA-256 digest of observed.","pattern":"^[a-f0-9]{64}$","type":"string"},"policy":{"const":"record-and-continue","description":"Value for policy.","type":"string"}},"required":["contradiction_id","declared_sha256","observed_sha256","policy","affected_comparison_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"delegation_checks":{"description":"Value for delegation checks.","items":{"additionalProperties":false,"properties":{"candidate_id":{"description":"Value for candidate id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"delegates_to_authority":{"description":"Value for delegates to authority.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"}},"required":["candidate_id","delegates_to_authority","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"deliberate_faults":{"description":"Value for deliberate faults.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"environment_id":{"description":"Value for environment id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","enum":["native","javascript-cli","electron","incomplete-reconstruction","broken-runtime"],"type":"string"}},"required":["fixture_id","kind","artifact_sha256","environment_id","deliberate_faults"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"grants":{"description":"Value for grants.","items":{"additionalProperties":false,"properties":{"decision":{"description":"Value for decision.","enum":["granted","denied","cancelled","restart-required"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"grant_id":{"description":"Value for grant id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"launched_process":{"description":"Value for launched process.","type":"boolean"},"scope":{"description":"Value for scope.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["grant_id","scope","decision","launched_process","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"identity":{"additionalProperties":false,"description":"Value for identity.","properties":{"catalog_digest":{"description":"Value for catalog digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"cli_version":{"description":"Value for cli version.","maxLength":4096,"minLength":1,"type":"string"},"providers":{"description":"Value for providers.","items":{"additionalProperties":false,"properties":{"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"provider_id":{"description":"Exact deep-analysis provider ID, or automatic selection when omitted.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"reason_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for reason code."},"state":{"description":"Value for state.","enum":["available","unavailable","incompatible","broken-host"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["provider_id","version","digest","state","reason_code"],"type":"object"},"maxItems":100,"type":"array"},"server_version":{"description":"Value for server version.","maxLength":4096,"minLength":1,"type":"string"},"skill_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for skill digest."},"versions":{"description":"Value for versions.","items":{"additionalProperties":false,"properties":{"component":{"description":"Value for component.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"remediation":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for remediation."},"state":{"description":"Value for state.","enum":["current","stale","unavailable"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["component","version","digest","state","remediation"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["cli_version","server_version","catalog_digest","skill_digest","versions","providers"],"type":"object"},"obligation_ledger":{"additionalProperties":false,"description":"Value for obligation ledger.","properties":{"closure_digest":{"description":"Value for closure digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"max_obligations":{"description":"Maximum permitted obligations for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"omitted_count":{"description":"Value for omitted count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","partial"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["status","truncated","omitted_count","max_obligations"],"type":"object"},"dependency_graph":{"description":"Value for dependency graph.","items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"description":"Value for depends on obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"description":"Value for ledger id.","pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"description":"Value for obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"description":"Value for authority references.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"state":{"description":"Value for state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"description":"Value for case kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}],"description":"Value for binding."},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"description":"Value for diagnostics.","items":{"additionalProperties":false,"properties":{"code":{"description":"Value for code.","enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"description":"Requested response detail level.","maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"description":"Value for observed cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"description":"Value for origin.","enum":["generated","reviewed"],"type":"string"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"description":"Value for source state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":10000,"type":"array"},"ownership_graph":{"description":"Value for ownership graph.","items":{"additionalProperties":false,"properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"reports":{"additionalProperties":false,"description":"Value for reports.","properties":{"contradicted_obligation_ids":{"description":"Value for contradicted obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"description":"Value for missing owner obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"description":"Value for missing verifier obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","description":"Value for schema.","type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"description":"Concise evidence-backed summary of the result.","properties":{"by_application_layer":{"description":"Value for by application layer.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_evidence_authority":{"description":"Value for by evidence authority.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_status":{"description":"Value for by status.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"required":{"description":"Value for required.","maximum":9007199254740991,"minimum":0,"type":"integer"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"description":"Value for verified.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","required","verified","required_open","by_status","by_application_layer","by_evidence_authority"],"type":"object"}},"required":["schema","schema_version","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","obligations","evidence_links","limitations"],"type":"object"},"operation_outcomes":{"description":"Value for operation outcomes.","items":{"additionalProperties":false,"properties":{"call_kind":{"description":"Value for call kind.","enum":["valid","malformed","over-limit","incompatible-provider","setup","permission","operation"],"type":"string"},"cli_exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for cli exit code."},"error_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for error code."},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_success":{"description":"Expected success used to reject stale or mismatched input.","type":"boolean"},"mcp_status":{"anyOf":[{"enum":["success","non-success"],"type":"string"},{"type":"null"}],"description":"Value for mcp status."},"operation":{"description":"Value for operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"recovered":{"description":"Value for recovered.","type":"boolean"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"surface":{"description":"Value for surface.","enum":["cli","mcp"],"type":"string"}},"required":["sequence","operation","surface","call_kind","expected_success","cli_exit_code","mcp_status","error_code","recovered","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"deterministic":{"description":"Value for deterministic.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_source_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Expected source digest used to reject stale or mismatched input."},"stale_input_detected":{"description":"Value for stale input detected.","type":"boolean"},"tamper_detected":{"description":"Value for tamper detected.","type":"boolean"}},"required":["expected_source_digest","deterministic","tamper_detected","stale_input_detected","evidence_ids"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"stages":{"description":"Value for stages.","items":{"additionalProperties":false,"properties":{"capability_issue":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for capability issue."},"checks":{"description":"Value for checks.","items":{"additionalProperties":false,"properties":{"check_id":{"description":"Value for check id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"detail":{"description":"Requested response detail level.","maxLength":4096,"minLength":1,"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["check_id","status","detail","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"next_action":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for next action."},"required":{"description":"Value for required.","type":"boolean"},"stage_id":{"description":"Value for stage id.","enum":["discover-classify","diagnose-environment","acquire-authority","static-analysis","reactive-scenarios","compare-authority-candidate","preserve-contradictions","verify-reconstruction-closure","export-replay"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["stage_id","required","status","capability_issue","next_action","evidence_ids","checks"],"type":"object"},"maxItems":9,"minItems":9,"type":"array"},"workflow_candidates":{"description":"Value for workflow candidates.","items":{"additionalProperties":false,"properties":{"compatibility":{"description":"Value for compatibility.","enum":["compatible","incompatible","unavailable"],"type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"invoked":{"description":"Value for invoked.","type":"boolean"},"provider_id":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"reason_code":{"description":"Value for reason code.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selected":{"description":"Value for selected.","type":"boolean"},"workflow_id":{"description":"Value for workflow id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","workflow_id","provider_id","selected","invoked","compatibility","reason_code"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"}},"required":["schema_version","identity","client","capabilities","fixtures","workflow_candidates","grants","evidence_bundle","comparisons","contradictions","obligation_ledger","operation_outcomes","cleanup","closure_history","delegation_checks","replay","stages"],"type":"object"},"kind":"application","name":"evaluate_reconstruction_readiness","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"metrics":{"additionalProperties":false,"properties":{"cleanup_leak_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"divergence_localization_precision":{"maximum":1,"minimum":0,"type":"number"},"failed_calls_before_prerequisites":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"false_equivalence_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_valid_workflow_selection_rate":{"maximum":1,"minimum":0,"type":"number"},"incompatible_provider_invocations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"malformed_or_over_limit_call_rate":{"maximum":1,"minimum":0,"type":"number"},"nondeterministic_replay_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"recovery_rate":{"maximum":1,"minimum":0,"type":"number"},"unowned_obligation_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_valid_workflow_selection_rate","malformed_or_over_limit_call_rate","incompatible_provider_invocations","failed_calls_before_prerequisites","recovery_rate","divergence_localization_precision","false_equivalence_count","unowned_obligation_count","cleanup_leak_count","nondeterministic_replay_count"],"type":"object"},"report_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"report_id":{"pattern":"^rr_[a-f0-9]{64}$","type":"string"},"report_resource_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}\\\\/reconstruction-readiness-report$","type":"string"},"schema":{"const":"ReconstructionReadinessReport","type":"string"},"schema_version":{"const":1,"type":"number"},"source_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"failed_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed_required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["stages","required_stages","passed_required_stages","findings","failed_findings","unknown_findings"],"type":"object"}},"required":["schema","schema_version","report_id","source_digest","report_digest","status","summary","metrics","report_resource_uri"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Evaluate Reconstruction Readiness"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Atomically commit one canonical evidence-backed reconstruction coverage workspace revision under an approved root. CAS revisions reject lost updates; every Evidence and residual-unknown reference must resolve in the embedded canonical bundle.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"expected_revision":null,"workspace":{"artifacts":[],"boundaries":[],"claims":[],"contradictions":[],"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"name":"replacement","owners":[],"package_proofs":[],"previous_revision_sha256":null,"residual_unknown_ids":[],"revision":1,"revision_sha256":"0000000000000000000000000000000000000000000000000000000000000000","schema_version":1,"surfaces":[],"verifier_contracts":[],"verifier_results":[],"workspace_id":"rcw_0000000000000000000000000000000000000000000000000000000000000000"},"workspace_path":"/approved/coverage.json"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_revision":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Expected revision used to reject stale or mismatched input."},"workspace":{"additionalProperties":false,"description":"Value for workspace.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"environment_sha256":{"description":"Exact SHA-256 digest of environment.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"version":{"description":"Value for version.","maxLength":500,"minLength":1,"type":"string"}},"required":["artifact_id","artifact_sha256","version","environment_sha256","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"boundaries":{"description":"Value for boundaries.","items":{"additionalProperties":false,"properties":{"allowed_dispositions":{"description":"Value for allowed dispositions.","items":{"enum":["external","non-goal"],"type":"string"},"maxItems":2,"type":"array"},"allowed_unknown_ids":{"description":"Value for allowed unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"required_claim_ids":{"description":"Value for required claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"required_package_proof_kinds":{"description":"Value for required package proof kinds.","items":{"enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_surface_ids":{"description":"Value for required surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["boundary_id","title","required_surface_ids","required_claim_ids","required_package_proof_kinds","allowed_dispositions","allowed_unknown_ids"],"type":"object"},"maxItems":1000,"type":"array"},"claims":{"description":"Value for claims.","items":{"additionalProperties":false,"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","maxLength":100,"minLength":1,"type":"string"},"required_authority":{"description":"Value for required authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"required_dimensions":{"description":"Value for required dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","kind","surface_ids","required_dimensions","required_authority"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":2,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["active","resolved"],"type":"string"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"}},"required":["contradiction_id","status","surface_ids","claim_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"},"owners":{"description":"Value for owners.","items":{"additionalProperties":false,"properties":{"ownership":{"description":"Value for ownership.","oneOf":[{"additionalProperties":false,"properties":{"authority_route":{"description":"Value for authority route.","enum":["none","detected","unknown"],"type":"string"},"disposition":{"const":"implemented","description":"Value for disposition.","type":"string"},"owner_export":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for owner export."},"owner_path":{"description":"Local filesystem path for owner.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"package_state":{"description":"Value for package state.","enum":["distributed","missing","unknown"],"type":"string"},"path_state":{"description":"Value for path state.","enum":["present","missing","unknown"],"type":"string"}},"required":["disposition","owner_path","owner_export","owner_sha256","path_state","package_state","authority_route"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["external","non-goal"],"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":4096,"minLength":1,"type":"string"}},"required":["disposition","rationale"],"type":"object"}]},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","ownership"],"type":"object"},"maxItems":10000,"type":"array"},"package_proofs":{"description":"Value for package proofs.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"kind":{"description":"Value for kind.","enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"proof_id":{"description":"Value for proof id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"}},"required":["proof_id","kind","status","artifact_sha256s","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"previous_revision_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of previous revision."},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"surfaces":{"description":"Value for surfaces.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"authority":{"description":"Value for authority.","enum":["observed","derived","inferred","historical","external"],"type":"string"},"dependency_surface_ids":{"description":"Value for dependency surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for occurrence id."},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","family","artifact_id","occurrence_id","location","authority","dependency_surface_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_contracts":{"description":"Value for verifier contracts.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"dimensions":{"description":"Value for dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"max_age_ms":{"description":"Maximum permitted age ms for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"minimum_repeats":{"description":"Value for minimum repeats.","maximum":1000,"minimum":1,"type":"integer"},"normalization_removes_dimensions":{"const":false,"description":"Value for normalization removes dimensions.","type":"boolean"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_ids","dimensions","authority","max_age_ms","minimum_repeats","normalization_sha256","normalization_removes_dimensions","contract_sha256"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_results":{"description":"Value for verifier results.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"covered_claim_ids":{"description":"Value for covered claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"covered_dimensions":{"description":"Value for covered dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"observed_at":{"description":"Value for observed at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z|([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)))$","type":"string"},"owner_sha256s":{"description":"Value for owner sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"repeats":{"description":"Value for repeats.","maximum":1000,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","contract_sha256","observed_at","status","covered_claim_ids","covered_dimensions","artifact_sha256s","owner_sha256s","normalization_sha256","repeats","evidence_ids"],"type":"object"},"maxItems":100000,"type":"array"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","workspace_id","name","revision","previous_revision_sha256","evidence_bundle","artifacts","surfaces","owners","claims","verifier_contracts","verifier_results","residual_unknown_ids","contradictions","package_proofs","boundaries","revision_sha256"],"type":"object"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","expected_revision","workspace"],"type":"object"},"kind":"application","name":"commit_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"pattern":"^rcw_[a-f0-9]{64}$","type":"string"},"workspace_path":{"type":"string"}},"required":["workspace_path","bytes","workspace_id","revision","revision_sha256","evidence_records"],"type":"object"},"requiresSession":false,"title":"Commit Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate one named reconstruction boundary from a canonical coverage workspace. Missing ownership or inventory is partial; stale, weak, truncated, skipped, or unresolved proof is unknown; contradictions, failed proof, missing owners, and authority routing fail closed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"boundary_id":"replacement.cli","workspace_path":"/approved/coverage.json"}],"properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["workspace_path","boundary_id"],"type":"object"},"kind":"application","name":"query_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"boundary_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"reasons":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["surface-missing","owner-missing","owner-duplicate","owner-path-missing","owner-path-unknown","owner-undistributed","owner-distribution-unknown","authority-routing-detected","authority-routing-unknown","disposition-not-allowed","dependency-surface-missing","claim-missing","verifier-missing","verifier-duplicate","verifier-result-missing","verifier-result-stale","verifier-result-incompatible","verifier-failed","verifier-unknown","active-unknown","active-contradiction","package-proof-missing","package-proof-failed","package-proof-unknown"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["code","subject_id","detail"],"type":"object"},"maxItems":100000,"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["operation","subject_id","rationale"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"enum":["partial","failed","unknown","ready"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"reasons":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_claims":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_surfaces":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["required_surfaces","required_claims","reasons"],"type":"object"},"workspace_revision_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["boundary_id","status","workspace_revision_sha256","summary","reasons","recommended_probes","evidence_ids"],"type":"object"},"requiresSession":false,"title":"Query Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Open a local executable, application bundle, archive, JavaScript, source map, plist, or analysis database after validation. provider_id selects one deep provider or deterministic auto selection; the binding remains stable until close or an explicit switch, with no failure fallback. An optional snapshot v2 is imported atomically and must match the binary identity, concrete provider, and canonical analysis profile exactly.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"path":"/tmp/fixture"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"provider_id":{"anyOf":[{"const":"auto","type":"string"},{"maxLength":64,"minLength":1,"pattern":"^[a-z][a-z0-9-]*$","type":"string"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"open_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"loaderArgs":{"items":{"type":"string"},"type":"array"},"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","format","kind","loaderArgs","sha256","architecture"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Open Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Optionally write a provider-neutral analysis snapshot atomically, then close the active target and every provider resource started for it. Snapshot files require an operator-approved root and explicit overwrite; a failed save leaves the session open so cached analysis is not lost.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"overwrite":false}],"properties":{"overwrite":{"default":false,"description":"Whether an existing destination may be replaced.","type":"boolean"},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"close_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"null"},{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"entries":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"}},"required":["path","bytes","entries"],"type":"object"}]}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Close Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Report compact target, provider, and alignment state without starting analysis. The default summary is the routing check agents should use; detail=capabilities returns one family-filtered availability page, while detail=full is reserved for complete provider diagnostics.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"cursor":0,"detail":"summary","limit":25}],"properties":{"capability_family":{"description":"Optional tool family for detail=capabilities","enum":["official-proxy","enhanced","native-provider","artifact-provider","managed-provider","browser-provider","electron-provider","runtime-provider","application","session"],"type":"string"},"cursor":{"default":0,"description":"Zero-based capability cursor for detail=capabilities","maximum":9007199254740991,"minimum":0,"type":"integer"},"detail":{"default":"summary","description":"summary returns routing state; capabilities returns one filtered tool-availability page; full returns complete diagnostics only when required","enum":["summary","capabilities","full"],"type":"string"},"expected_catalog_digest":{"description":"Expected catalog digest used to reject stale or mismatched input.","pattern":"^[a-f0-9]{64}$","type":"string"},"expected_package_version":{"description":"Expected package version used to reject stale or mismatched input.","minLength":1,"type":"string"},"expected_server_path":{"description":"Expected server path used to reject stale or mismatched input.","minLength":1,"type":"string"},"limit":{"default":25,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},"kind":"session","name":"binary_session","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"additionalProperties":false,"properties":{"active_provider":{"anyOf":[{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},{"type":"null"}]},"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"open":{"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"recommended_actions":{"items":{"type":"string"},"type":"array"},"target":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","format","kind","sha256","architecture"],"type":"object"},{"type":"null"}]},"view":{"const":"summary","type":"string"}},"required":["view","open","provider","active_provider","target","alignment","analysis_activity","recommended_actions"],"type":"object"},{"additionalProperties":false,"properties":{"active_provider":{"anyOf":[{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},{"type":"null"}]},"capabilities":{"additionalProperties":false,"properties":{"cursor":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"has_more":{"type":"boolean"},"items":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":true,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","cursor","limit","total","next_cursor","has_more"],"type":"object"},"capability_family":{"anyOf":[{"type":"string"},{"type":"null"}]},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"open":{"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"view":{"const":"capabilities","type":"string"}},"required":["view","open","provider","active_provider","capability_family","capabilities","client_features"],"type":"object"},{"anyOf":[{"additionalProperties":false,"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selection_source":{"enum":["request","environment","auto-single-candidate"],"type":"string"}},"required":["provider","selection_source","analysis_profile"],"type":"object"},{"type":"null"}]},"analysis_provider_candidates":{"items":{"additionalProperties":false,"properties":{"availability":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"available","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"supported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unsupported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]}},"required":["provider","availability","target_support","selected","capabilities"],"type":"object"},"type":"array"},"analysis_run":{"anyOf":[{"additionalProperties":false,"properties":{"process_lineage":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"not_observed","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"snapshots":{"items":{"additionalProperties":false,"properties":{"observation":{"oneOf":[{"additionalProperties":false,"properties":{"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","observed_at","launcher_pid","process_group_id","reason"],"type":"object"},{"additionalProperties":false,"properties":{"descendants":{"items":{"additionalProperties":false,"properties":{"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["pid","parent_pid","process_group_id"],"type":"object"},"type":"array"},"launcher_parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","schema_version","launcher_pid","process_group_id","launcher_parent_pid","descendants"],"type":"object"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"}},"required":["provider","observation"],"type":"object"},"type":"array"},"status":{"const":"snapshots","type":"string"}},"required":["status","snapshots"],"type":"object"}]},"run_id":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},"required":["run_id","process_lineage"],"type":"object"},{"type":"null"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"open":{"const":false,"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"},"client":{"anyOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},{"type":"null"}]},"negotiated_protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"package":{"additionalProperties":false,"properties":{"build_commit":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"root_path":{"type":"string"},"version":{"type":"string"}},"required":["name","version","root_path","build_commit"],"type":"object"},"protocol_features":{"additionalProperties":false,"properties":{"cancellation":{"type":"boolean"},"elicitation":{"type":"boolean"},"evidence_resources":{"type":"boolean"},"progress":{"type":"boolean"}},"required":["progress","cancellation","evidence_resources","elicitation"],"type":"object"},"sdk":{"additionalProperties":false,"properties":{"client_test":{"type":"string"},"core":{"type":"string"},"server":{"type":"string"}},"required":["server","client_test","core"],"type":"object"},"server":{"additionalProperties":false,"properties":{"command_path":{"type":"string"},"name":{"type":"string"},"started_at":{"type":"string"},"version":{"type":"string"}},"required":["name","version","started_at","command_path"],"type":"object"},"skill":{"additionalProperties":false,"properties":{"expected_version":{"type":"string"},"name":{"type":"string"}},"required":["name","expected_version"],"type":"object"}},"required":["package","server","sdk","negotiated_protocol_version","client","skill","catalog","protocol_features","alignment"],"type":"object"},"tool_availability":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":true,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"},"view":{"const":"full","type":"string"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","view","open"],"type":"object"},{"additionalProperties":false,"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selection_source":{"enum":["request","environment","auto-single-candidate"],"type":"string"}},"required":["provider","selection_source","analysis_profile"],"type":"object"},{"type":"null"}]},"analysis_provider_candidates":{"items":{"additionalProperties":false,"properties":{"availability":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"available","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"supported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unsupported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]}},"required":["provider","availability","target_support","selected","capabilities"],"type":"object"},"type":"array"},"analysis_run":{"anyOf":[{"additionalProperties":false,"properties":{"process_lineage":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"not_observed","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"snapshots":{"items":{"additionalProperties":false,"properties":{"observation":{"oneOf":[{"additionalProperties":false,"properties":{"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","observed_at","launcher_pid","process_group_id","reason"],"type":"object"},{"additionalProperties":false,"properties":{"descendants":{"items":{"additionalProperties":false,"properties":{"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["pid","parent_pid","process_group_id"],"type":"object"},"type":"array"},"launcher_parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","schema_version","launcher_pid","process_group_id","launcher_parent_pid","descendants"],"type":"object"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"}},"required":["provider","observation"],"type":"object"},"type":"array"},"status":{"const":"snapshots","type":"string"}},"required":["status","snapshots"],"type":"object"}]},"run_id":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},"required":["run_id","process_lineage"],"type":"object"},{"type":"null"}]},"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"open":{"const":true,"type":"boolean"},"path":{"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"},"client":{"anyOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},{"type":"null"}]},"negotiated_protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"package":{"additionalProperties":false,"properties":{"build_commit":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"root_path":{"type":"string"},"version":{"type":"string"}},"required":["name","version","root_path","build_commit"],"type":"object"},"protocol_features":{"additionalProperties":false,"properties":{"cancellation":{"type":"boolean"},"elicitation":{"type":"boolean"},"evidence_resources":{"type":"boolean"},"progress":{"type":"boolean"}},"required":["progress","cancellation","evidence_resources","elicitation"],"type":"object"},"sdk":{"additionalProperties":false,"properties":{"client_test":{"type":"string"},"core":{"type":"string"},"server":{"type":"string"}},"required":["server","client_test","core"],"type":"object"},"server":{"additionalProperties":false,"properties":{"command_path":{"type":"string"},"name":{"type":"string"},"started_at":{"type":"string"},"version":{"type":"string"}},"required":["name","version","started_at","command_path"],"type":"object"},"skill":{"additionalProperties":false,"properties":{"expected_version":{"type":"string"},"name":{"type":"string"}},"required":["name","expected_version"],"type":"object"}},"required":["package","server","sdk","negotiated_protocol_version","client","skill","catalog","protocol_features","alignment"],"type":"object"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"tool_availability":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":true,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"},"view":{"const":"full","type":"string"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","view","open","path","format","kind","sha256","architecture"],"type":"object"}]}]}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Binary Session"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Atomically write the session\'s deterministic Evidence v2 bundle beneath an operator-approved root. Existing files require overwrite: true; records and manifests use canonical byte-stable ordering. For an in-session read, use snapshot_evidence_bundle and read its exact resource URI instead.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"overwrite":false,"path":"/tmp/evidence.json"}],"properties":{"overwrite":{"default":false,"description":"Whether an existing destination may be replaced.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"export_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["path","bytes","records","unknowns"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Export Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read a bounded local JSON bundle beneath an operator-approved root, validate every Evidence v2 ID and canonical manifest, then atomically merge it. Imported content is data only and is never executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"path":"evidence.json"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"import_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"imported":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["imported","unknowns_added","total"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Import Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run one bounded process under a PTY using operator-approved executable and working roots. Produces Process Capture v4; legacy v3 captures cannot be upgraded and must be recaptured with this tool. Requires approved: true; unknown_registry_approved: true separately records capture residuals. Captures raw and xterm-rendered terminal frames, scripted interactions, lifecycle filesystem checkpoints, process ownership, declarative command shims, and loopback replay. Disabled unless operator policy enables it; not a security sandbox.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":false,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"oneOf":[{"additionalProperties":false,"properties":{"cardinality":{"additionalProperties":false,"description":"Value for cardinality.","properties":{"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":256,"type":"integer"}},"required":["min","max"],"type":"object"},"consume":{"description":"Value for consume.","type":"boolean"},"exact":{"$ref":"#/$defs/__schema1","description":"Value for exact."},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"kind":{"const":"event","description":"Value for kind.","type":"string"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["kind","source","exact","ignore_fields","since","consume","cardinality"],"type":"object"},{"additionalProperties":false,"properties":{"case_sensitive":{"const":true,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"consume":{"description":"Value for consume.","type":"boolean"},"control_sequences":{"const":"include","description":"Value for control sequences.","type":"string"},"encoding":{"const":"utf8","description":"Value for encoding.","type":"string"},"kind":{"const":"terminal_text","description":"Value for kind.","type":"string"},"literal":{"description":"Value for literal.","maxLength":10000,"minLength":1,"type":"string"},"occurrence":{"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"view":{"const":"decoded","description":"Value for view.","type":"string"}},"required":["kind","view","encoding","literal","case_sensitive","control_sequences","occurrence","since","consume"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"all","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"any","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"sequence","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":1,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"repeat","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"trigger":{"$ref":"#/$defs/__schema0","description":"Value for trigger."}},"required":["kind","trigger","min","max"],"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"arguments":[],"checkpoints":[],"command_shims":[],"environment":{},"events":[],"executable":"/usr/bin/true","filesystem_roots":[],"idle_timeout_ms":30000,"inherit_environment":[],"limits":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"network_access":"host","normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"reactive":null,"replay":{"http":[],"machine":null,"websocket_connections":[],"websocket_messages":[]},"secret_aliases":[],"settle_ms":100,"terminal":{"columns":80,"rows":24,"scrollback":1000},"timeout_ms":30000,"working_directory":"/tmp"}],"properties":{"approved":{"const":true,"description":"Explicit per-call acknowledgement that this operation launches the target","type":"boolean"},"arguments":{"default":[],"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"checkpoints":{"default":[],"description":"Value for checkpoints.","items":{"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"type":{"const":"time","description":"Value for type.","type":"string"}},"required":["type","at_ms"],"type":"object"},{"properties":{"occurrence":{"default":1,"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"type":{"const":"terminal_literal","description":"Value for type.","type":"string"},"value":{"description":"Value for value.","maxLength":10000,"minLength":1,"type":"string"}},"required":["type","value"],"type":"object"},{"properties":{"type":{"const":"root_exit","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"properties":{"type":{"const":"settled","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"}]}},"required":["name","trigger"],"type":"object"},"maxItems":64,"type":"array"},"command_shims":{"default":[],"description":"Value for command shims.","items":{"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","type":"string"},"routes":{"description":"Value for routes.","items":{"properties":{"arguments":{"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","exclusiveMinimum":0,"maximum":100,"type":"integer"},"outputs":{"default":[],"description":"Value for outputs.","items":{"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"stream":{"description":"Value for stream.","enum":["stdout","stderr"],"type":"string"}},"required":["at_ms","stream","data"],"type":"object"},"maxItems":1000,"type":"array"},"termination":{"description":"Value for termination.","oneOf":[{"properties":{"code":{"description":"Value for code.","maximum":255,"minimum":0,"type":"integer"},"type":{"const":"exit","description":"Value for type.","type":"string"}},"required":["type","code"],"type":"object"},{"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["type","signal"],"type":"object"}]}},"required":["arguments","termination"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["name","routes"],"type":"object"},"maxItems":32,"type":"array"},"environment":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for environment.","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"type":"object"},"events":{"default":[],"description":"Value for events.","items":{"oneOf":[{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","type":"string"},"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"type":{"const":"input","description":"Value for type.","type":"string"}},"required":["at_ms","type","data"],"type":"object"},{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["at_ms","type","columns","rows"],"type":"object"},{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["at_ms","type","signal"],"type":"object"}]},"maxItems":1000,"type":"array"},"executable":{"description":"Approved absolute path of the executable to run.","pattern":"^\\\\/.*","type":"string"},"filesystem_roots":{"default":[],"description":"Approved canonical filesystem filesystem roots.","items":{"pattern":"^\\\\/.*","type":"string"},"maxItems":16,"type":"array"},"idle_timeout_ms":{"default":30000,"description":"Value for idle timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"inherit_environment":{"default":[],"description":"Value for inherit environment.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"limits":{"default":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"connections":{"default":100,"description":"Value for connections.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"file_bytes":{"default":10000000,"description":"Bounded byte count for file.","exclusiveMinimum":0,"maximum":100000000,"type":"integer"},"files":{"default":10000,"description":"Value for files.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"filesystem_depth":{"default":16,"description":"Value for filesystem depth.","maximum":64,"minimum":1,"type":"integer"},"frames":{"default":10000,"description":"Value for frames.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"output_bytes":{"default":1000000,"description":"Bounded byte count for output.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"processes":{"default":1000,"description":"Value for processes.","exclusiveMinimum":0,"maximum":10000,"type":"integer"},"protocol_body_bytes":{"default":1000000,"description":"Bounded byte count for protocol body.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"protocol_events":{"default":10000,"description":"Value for protocol events.","exclusiveMinimum":0,"maximum":100000,"type":"integer"}},"type":"object"},"network_access":{"const":"host","default":"host","description":"Value for network access.","type":"string"},"normalization":{"default":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"description":"Value for normalization.","properties":{"paths":{"default":true,"description":"Value for paths.","type":"boolean"},"patterns":{"default":[],"description":"Value for patterns.","items":{"properties":{"pattern":{"description":"Text or bounded pattern used to filter matching results.","maxLength":500,"type":"string"},"replacement":{"description":"Value for replacement.","maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"maxItems":32,"type":"array"},"pids":{"default":true,"description":"Value for pids.","type":"boolean"},"ports":{"default":true,"description":"Value for ports.","type":"boolean"},"time_bucket_ms":{"default":10,"description":"Value for time bucket ms.","exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"type":"object"},"reactive":{"anyOf":[{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_visits":{"description":"Maximum permitted visits for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"on":{"description":"Value for on.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"sensitive":{"description":"Value for sensitive.","type":"boolean"},"type":{"const":"send_input","description":"Value for type.","type":"string"}},"required":["type","data","sensitive"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["type","columns","rows"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"close_stdin","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"root","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"process_group","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"subject_id","description":"Value for kind.","type":"string"},"subject_id":{"description":"Value for subject id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","subject_id"],"type":"object"}]},"type":{"const":"send_signal","description":"Value for type.","type":"string"}},"required":["type","target","signal"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"type":{"const":"checkpoint","description":"Value for type.","type":"string"}},"required":["type","name"],"type":"object"}]},"maxItems":16,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"priority":{"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"goto","description":"Value for kind.","type":"string"},"state":{"description":"Value for state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","state"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finish","description":"Value for kind.","type":"string"},"outcome":{"const":"passed","description":"Value for outcome.","type":"string"}},"required":["kind","outcome"],"type":"object"}]},"when":{"$ref":"#/$defs/__schema0","description":"Value for when."}},"required":["id","priority","max_uses","when","actions","target"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["id","max_visits","deadline_ms","on"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","initial_state","deadline_ms","states"],"type":"object"},{"type":"null"}],"description":"Value for reactive."},"replay":{"description":"Value for replay.","properties":{"http":{"default":[],"description":"Value for http.","items":{"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"},"disconnect":{"default":false,"description":"Value for disconnect.","type":"boolean"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","maximum":100,"minimum":1,"type":"integer"},"method":{"description":"Value for method.","maxLength":16,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"request_body":{"description":"Value for request body.","maxLength":1000000,"type":"string"},"request_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for request headers.","propertyNames":{"type":"string"},"type":"object"},"response_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for response headers.","propertyNames":{"type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["method","path","status","body"],"type":"object"},"maxItems":100,"type":"array"},"machine":{"anyOf":[{"additionalProperties":false,"properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"},{"type":"null"}],"description":"Value for machine."},"websocket_connections":{"default":[],"description":"Value for websocket connections.","items":{"properties":{"disconnect_after":{"default":false,"description":"Value for disconnect after.","type":"boolean"},"messages":{"description":"Value for messages.","items":{"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"}},"required":["data"],"type":"object"},"maxItems":100,"type":"array"}},"required":["messages"],"type":"object"},"maxItems":100,"type":"array"},"websocket_messages":{"default":[],"description":"Value for websocket messages.","items":{"maxLength":1000000,"type":"string"},"maxItems":100,"type":"array"}},"type":"object"},"secret_aliases":{"default":[],"description":"Value for secret aliases.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"settle_ms":{"default":100,"description":"Value for settle ms.","maximum":10000,"minimum":0,"type":"integer"},"terminal":{"default":{"columns":80,"rows":24,"scrollback":1000},"description":"Value for terminal.","properties":{"columns":{"default":80,"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"default":24,"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"scrollback":{"default":1000,"description":"Value for scrollback.","maximum":10000,"minimum":0,"type":"integer"}},"type":"object"},"timeout_ms":{"default":30000,"description":"Value for timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture residuals durably","type":"boolean"},"working_directory":{"description":"Value for working directory.","pattern":"^\\\\/.*","type":"string"}},"required":["approved","executable","working_directory"],"type":"object"},"kind":"session","name":"capture_process_scenario","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"owned_process_group":{"const":"verified","type":"string"},"temporary_root":{"const":"removed","type":"string"}},"required":["owned_process_group","temporary_root"],"type":"object"},"event_journal":{"default":[],"items":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["capture_order","collection","index"],"type":"object"},"type":"array"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"reason":{"enum":["exited","timeout","idle_timeout"],"type":"string"},"signal":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]}},"required":["code","signal","reason"],"type":"object"},"files_after":{"items":{"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":{"maxLength":500,"type":"string"},"replacement":{"maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"type":"array"},"pids":{"type":"boolean"},"ports":{"type":"boolean"},"time_bucket_ms":{"exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"required":["paths","pids","ports","time_bucket_ms","patterns"],"type":"object"},"process_samples":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"command":{"type":"string"},"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"process_group_id":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"session_id":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["at_ms","pid","parent_pid","command","process_group_id","session_id"],"type":"object"},"type":"array"},"protocol_events":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"type":"string"},"direction":{"enum":["request","response","received","sent"],"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"enum":["matched","unmatched","script_exhausted","disconnected","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"},"path":{"anyOf":[{"type":"string"},{"type":"null"}]},"protocol":{"enum":["http","websocket"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","at_ms","protocol","direction","method","path","data","outcome"],"type":"object"},"type":"array"},"reactive_run":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"active_state":{"maxLength":64,"minLength":1,"type":"string"},"controls":{"default":[],"items":{"additionalProperties":false,"properties":{"after_capture_order":{"maximum":9007199254740991,"minimum":-1,"type":"integer"},"kind":{"enum":["state_deadline","scenario_deadline","target_lost","cancelled","cleanup_failed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","kind","after_capture_order"],"type":"object"},"type":"array"},"outcome":{"type":"null"},"status":{"const":"running","type":"string"},"transitions":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"type":"null"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"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"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"const":"passed","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"type":"null"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"}]},"maxItems":128,"type":"array"}},"required":["status","outcome","active_state","controls","transitions"],"type":"object"},{"additionalProperties":false,"properties":{"active_state":{"maxLength":64,"minLength":1,"type":"string"},"controls":{"default":[],"items":{"additionalProperties":false,"properties":{"after_capture_order":{"maximum":9007199254740991,"minimum":-1,"type":"integer"},"kind":{"enum":["state_deadline","scenario_deadline","target_lost","cancelled","cleanup_failed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","kind","after_capture_order"],"type":"object"},"type":"array"},"outcome":{"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"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"type":"null"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"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"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"const":"passed","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"type":"null"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"}]},"maxItems":128,"type":"array"}},"required":["status","outcome","active_state","controls","transitions"],"type":"object"}]},{"type":"null"}],"default":null},"rendered_frames":{"items":{"additionalProperties":false,"properties":{"active_buffer":{"enum":["normal","alternate"],"type":"string"},"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"cursor_x":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"cursor_y":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"lines":{"items":{"type":"string"},"type":"array"},"rows":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"serialized_state":{"type":"string"}},"required":["sequence","at_ms","columns","rows","cursor_x","cursor_y","active_buffer","lines","serialized_state"],"type":"object"},"type":"array"},"replay_transitions":{"default":[],"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sensitive_aliases":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","sensitive_aliases"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"additionalProperties":false,"properties":{"reason":{"type":"string"},"scope":{"enum":["terminal","interaction","exit","process","filesystem","protocol","shim","cleanup","network"],"type":"string"}},"required":["scope","reason"],"type":"object"},"type":"array"},"schema_version":{"const":4,"type":"number"},"settlement":{"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":["schema_version","manifest","normalization","frames","rendered_frames","interaction_events","exit","settlement","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions","reactive_run","event_journal","files_before","files_after","filesystem_effects","truncated","limitations","residual_unknowns","cleanup"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Capture Process Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two compatible Process Capture v4 observations across terminal, interaction, lifecycle, process, filesystem, command-shim, HTTP, and WebSocket evidence. Optional trace_spec validates exact events against an explicit partial order or finite trace language; concurrency is never inferred from timestamps or broad sorting. Missing, journal-free, or truncated observations are never treated as equivalent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"max_capture_age_ms":{"description":"Maximum permitted capture age ms for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"trace_spec":{"additionalProperties":false,"description":"Value for trace spec.","properties":{"events":{"description":"Value for events.","items":{"additionalProperties":false,"properties":{"cardinality":{"default":{"kind":"required"},"description":"Value for cardinality.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"required","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"optional","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"exact","description":"Value for kind.","type":"string"}},"required":["kind","count"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"range","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","maximum":10000,"minimum":0,"type":"integer"},"min":{"description":"Value for min.","maximum":10000,"minimum":0,"type":"integer"}},"required":["kind","min","max"],"type":"object"}]},"exact":{"$ref":"#/$defs/__schema0","description":"Value for exact."},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["id","source","exact"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"language":{"description":"Value for language.","oneOf":[{"additionalProperties":false,"properties":{"happens_before":{"default":[],"description":"Value for happens before.","items":{"additionalProperties":false,"properties":{"after":{"description":"The later or right-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"before":{"description":"The earlier or left-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["before","after"],"type":"object"},"maxItems":4096,"type":"array"},"kind":{"const":"partial_order","description":"Value for kind.","type":"string"},"not_before":{"default":[],"description":"Value for not before.","items":{"additionalProperties":false,"properties":{"anchor":{"description":"Value for anchor.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"event":{"description":"Value for event.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["event","anchor"],"type":"object"},"maxItems":4096,"type":"array"},"prefix":{"default":[],"description":"Value for prefix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"suffix":{"default":[],"description":"Value for suffix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"unordered_groups":{"default":[],"description":"Value for unordered groups.","items":{"additionalProperties":false,"properties":{"events":{"description":"Value for events.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["events"],"type":"object"},"maxItems":256,"type":"array"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finite_traces","description":"Value for kind.","type":"string"},"variants":{"description":"Value for variants.","items":{"additionalProperties":false,"properties":{"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"trace":{"description":"Value for trace.","items":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"additionalProperties":false,"properties":{"unordered":{"description":"Value for unordered.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["unordered"],"type":"object"}]},"maxItems":4096,"type":"array"}},"required":["id","trace"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["kind","variants"],"type":"object"}]},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","events","language"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture disagreement durably","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"session","name":"compare_process_captures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"exit":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"filesystem":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"first_divergence":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"none","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"left_at_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"right_at_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"found","type":"string"}},"required":["status","dimension","index","left_at_ms","right_at_ms","left","right"],"type":"object"}]},"interaction":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"process":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"protocol":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"shim":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"terminal":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"trace":{"additionalProperties":false,"properties":{"diagnostic":{"anyOf":[{"additionalProperties":false,"properties":{"event_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"type":"array"},"kind":{"enum":["journal","predicate","cardinality","edge","prefix","suffix","trace"],"type":"string"},"locations":{"items":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["collection","index","capture_order"],"type":"object"},"type":"array"},"message":{"type":"string"},"side":{"enum":["left","right"],"type":"string"}},"required":["kind","side","message","event_ids","locations"],"type":"object"},{"type":"null"}]},"left":{"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_uri"],"type":"object"},"requiresSession":true,"title":"Compare Process Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two bounded sets of inventory_artifact Evidence pages by logical occurrence path, content identity, metadata, and graph relations. Pages must share and satisfy their graph commitment; every delta cites both sets, and gaps yield truncated or unknown, never equivalence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_ids":["ev_b74d3ff6cdf54af4e4f3dab00965780cb5ef2b375188c75c1980d0998c5a05a4"],"limit":100,"offset":0,"right_evidence_ids":["ev_74ecec364f3987b332db851177d2117a89d49df4ba89ab5d87299940092d7bb4"]}],"properties":{"left_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the left observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the right observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record incomplete or differing evidence","type":"boolean"}},"required":["left_evidence_ids","right_evidence_ids"],"type":"object"},"kind":"session","name":"compare_artifacts","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","contradiction"],"type":"string"},"dimensions":{"items":{"enum":["content","kind","format","size","executable","relations","metadata","availability","integrity"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"right_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["classification","logical_path","dimensions","left_occurrence_id","right_occurrence_id","left_artifact_id","right_artifact_id","evidence_links"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"contradiction":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","added","removed","changed","unknown","contradiction"],"type":"object"}},"required":["status","left_manifest_id","right_manifest_id","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Artifacts"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two explicit bounded sets of analyze_function Evidence pages across identity, exact provider text, calls, references, strings, and address-normalized CFG topology. Missing or provider-incompatible facets remain truncated or unknown; every conclusion cites both Evidence sets.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]}],"properties":{"left_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the left observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the right observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_ids","right_evidence_ids"],"type":"object"},"kind":"session","name":"compare_functions","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"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"},"maxItems":200,"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"},"maxItems":200,"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"},"maxItems":200,"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":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"dimensions":{"items":{"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"},"maxItems":200,"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"},"maxItems":200,"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"},"maxItems":200,"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_uri"],"type":"object"},"requiresSession":true,"title":"Compare Functions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two canonical Evidence v2 bundles by exact record membership, explicit one-to-one observation pairs, and complete residual-unknown revision histories. Missing bundle members describe omission only, never behavioral equivalence; output is digest-anchored and deterministically paginated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_bundle_path":"/approved/left-evidence.json","limit":100,"offset":0,"record_pairs":[],"right_bundle_path":"/approved/right-evidence.json"}],"properties":{"left_bundle_path":{"description":"Local filesystem path for left bundle.","maxLength":4096,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"record_pairs":{"default":[],"description":"Value for record pairs.","items":{"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"right_bundle_path":{"description":"Local filesystem path for right bundle.","maxLength":4096,"minLength":1,"type":"string"}},"required":["left_bundle_path","right_bundle_path"],"type":"object"},"kind":"session","name":"compare_bundles","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","history_advanced","history_diverged"],"type":"string"},"conclusion_kind":{"enum":["observed_change","contradiction","unresolved_branch"],"type":"string"},"entity":{"enum":["evidence","residual_unknown"],"type":"string"},"key":{"minLength":1,"type":"string"},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["entity","key","classification","conclusion_kind","left_evidence_ids","right_evidence_ids","left_digest","right_digest","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","changed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"records_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_advanced":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_diverged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["records_unchanged","records_added","records_removed","records_changed","unknowns_unchanged","unknowns_added","unknowns_removed","unknowns_advanced","unknowns_diverged","unresolved"],"type":"object"}},"required":["status","left_bundle_sha256","right_bundle_sha256","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Bundles"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Aggregate validated comparison Evidence, or automatically run and resume a persistent cross-version artifact investigation beneath an approved evidence root. Runtime observations remain distinct from static behavior candidates; missing or incomplete comparisons produce unresolved findings, never causal claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":{"items":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null}],"limit":100,"next_offset":null,"offset":0,"total":2},"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":null,"left_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","limitations":[],"right_count":null,"right_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"calls","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"references","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"strings_names","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"cfg","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":1,"left_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","limitations":[],"right_count":1,"right_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","status":"unchanged","text_delta":null}],"function_match":{"left_name":"main","method":"symbol","right_name":"main","status":"matched"},"left_subject_sha256":"0000000000000000000000000000000000000000000000000000000000000000","limitations":[],"right_subject_sha256":"1111111111111111111111111111111111111111111111111111111111111111","status":"unknown","summary":{"changed":1,"truncated":0,"unchanged":6,"unknown":1}},"operation":"compare_functions","parameters":{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"limit":100,"offset":0}],"properties":{"comparisons":{"default":[],"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"investigation_run":{"anyOf":[{"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_workspace_revision":{"description":"Expected workspace revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"left_path":{"description":"Local filesystem path for left.","maxLength":4096,"minLength":1,"type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"options":{"default":{"change_limit":500,"max_compression_ratio":1000,"max_depth":20,"max_entries":10000,"max_entry_bytes":268435456,"max_path_bytes":4096,"max_total_bytes":1073741824,"page_size":500},"description":"Value for options.","properties":{"change_limit":{"default":500,"description":"Maximum number of change entries to return.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"page_size":{"default":500,"description":"Value for page size.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"replay_run_id":{"description":"Value for replay run id.","pattern":"^run_[a-f0-9]{64}$","type":"string"},"right_path":{"description":"Local filesystem path for right.","maxLength":4096,"minLength":1,"type":"string"},"workspace_name":{"default":"default","description":"Value for workspace name.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","left_path","right_path"],"type":"object"},{"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_workspace_revision":{"description":"Expected workspace revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"left_path":{"description":"Local filesystem path for left.","maxLength":4096,"minLength":1,"type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"options":{"default":{"change_limit":500,"max_compression_ratio":1000,"max_depth":20,"max_entries":10000,"max_entry_bytes":268435456,"max_path_bytes":4096,"max_total_bytes":1073741824,"page_size":500},"description":"Value for options.","properties":{"change_limit":{"default":500,"description":"Maximum number of change entries to return.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"page_size":{"default":500,"description":"Value for page size.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"replay_run_id":{"description":"Value for replay run id.","pattern":"^run_[a-f0-9]{64}$","type":"string"},"right_path":{"description":"Local filesystem path for right.","maxLength":4096,"minLength":1,"type":"string"},"workspace_name":{"default":"default","description":"Value for workspace name.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","left_path","right_path","integrity_policy","integrity_continue_approved"],"type":"object"}],"description":"Value for investigation run."},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"type":"object"},"kind":"session","name":"find_changed_behavior","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"behavior_status":{"enum":["observed_changed","observed_unchanged","unknown","truncated"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":3,"type":"array"},"findings":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["observed_change","derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"scope":{"enum":["runtime","protocol","resource","static_candidate"],"type":"string"},"source_comparison_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["scope","dimension","classification","status","source_comparison_id","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"investigation_run":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"inventory_evidence_count":{"maximum":200,"minimum":2,"type":"integer"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"run_id":{"pattern":"^run_[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"workspace_id":{"pattern":"^ws_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","workspace_id","run_id","left_manifest_id","right_manifest_id","inventory_evidence_count","comparison_evidence_id","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observed_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["observed_changes","static_candidates","contradictions","unresolved"],"type":"object"}},"required":["behavior_status","summary","findings","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Find Changed Behavior"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Build bounded shortest-first direct-callee paths from explicit analyze_function Evidence groups using exact canonical addresses. Missing dossiers, incomplete callee pages, provider mixing, and depth frontiers remain unknown; every node and edge cites source Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"functions":[{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"basic_blocks":{"items":[{"end":"0x1001","start":"0x1000","successors":[]}],"next_offset":null,"returned":1,"total":1,"truncated":false},"callees":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"callers":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"comments":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"incoming_references":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"instruction_scan":{"scanned":1,"truncated":false},"outgoing_references":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":{"next_offset":null,"returned_chars":9,"text":"return 0;","total_chars":9,"truncated":false},"referenced_names":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"referenced_strings":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false}},"operation":"analyze_function","parameters":{"assembly_offset":0,"collection_offset":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"include_assembly":false,"limit":100,"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main","pseudocode_offset":0},"predicate_type":"rea.analysis/v2","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"schema_version":2,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"mach-o","local_path":"/tmp/function-0","name":"function-0"}}],"goal":{"address":"0x1000"},"limit":100,"max_depth":8,"max_paths":10,"offset":0,"start":{"address":"0x1000"}}],"properties":{"functions":{"description":"Value for functions.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}]},"maxItems":500,"minItems":1,"type":"array"},"goal":{"additionalProperties":false,"description":"Value for goal.","properties":{"address":{"description":"Value for address.","pattern":"^0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_depth":{"default":8,"description":"Maximum permitted depth for this operation.","maximum":32,"minimum":0,"type":"integer"},"max_paths":{"default":10,"description":"Maximum permitted paths for this operation.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"start":{"additionalProperties":false,"description":"Value for start.","properties":{"address":{"description":"Value for address.","pattern":"^0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["functions","start","goal"],"type":"object"},"kind":"session","name":"build_call_path","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"minItems":1,"type":"array"},"explored":{"additionalProperties":false,"properties":{"depth_reached":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["nodes","edges","depth_reached"],"type":"object"},"goal":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"source":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"target":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"}},"required":["source","target","evidence_links"],"type":"object"},"maxItems":32,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3300,"minItems":1,"type":"array"},"hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","evidence_links"],"type":"object"},"maxItems":33,"minItems":1,"type":"array"}},"required":["hops","nodes","edges","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"lower_bound":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":100,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"truncated":{"const":false,"type":"boolean"}},"required":["offset","limit","items","returned","next_offset","total","truncated","lower_bound"],"type":"object"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"max_depth":{"maximum":32,"minimum":0,"type":"integer"},"max_paths":{"maximum":100,"minimum":1,"type":"integer"}},"required":["max_depth","max_paths","exhaustive"],"type":"object"},"shortest_hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"start":{"pattern":"^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"},"maxItems":50000,"minItems":1,"type":"array"},"explored":{"additionalProperties":false,"properties":{"depth_reached":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["nodes","edges","depth_reached"],"type":"object"},"goal":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"additionalProperties":false,"properties":{"items":{"prefixItems":[],"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"lower_bound":{"const":0,"type":"number"},"next_offset":{"type":"null"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"const":0,"type":"number"},"total":{"const":0,"type":"number"},"truncated":{"const":false,"type":"boolean"}},"required":["offset","limit","items","total","returned","truncated","lower_bound","next_offset"],"type":"object"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":true,"type":"boolean"},"max_depth":{"maximum":32,"minimum":0,"type":"integer"},"max_paths":{"maximum":100,"minimum":1,"type":"integer"}},"required":["max_depth","max_paths","exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^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"},"maxItems":50000,"minItems":1,"type":"array"},"explored":{"additionalProperties":false,"properties":{"depth_reached":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["nodes","edges","depth_reached"],"type":"object"},"goal":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"additionalProperties":false,"properties":{"items":{"prefixItems":[],"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"lower_bound":{"const":0,"type":"number"},"next_offset":{"type":"null"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"const":0,"type":"number"},"total":{"const":0,"type":"number"},"truncated":{"const":false,"type":"boolean"}},"required":["offset","limit","items","total","returned","truncated","lower_bound","next_offset"],"type":"object"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":false,"type":"boolean"},"max_depth":{"maximum":32,"minimum":0,"type":"integer"},"max_paths":{"maximum":100,"minimum":1,"type":"integer"}},"required":["max_depth","max_paths","exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^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"},{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"minItems":1,"type":"array"},"explored":{"additionalProperties":false,"properties":{"depth_reached":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["nodes","edges","depth_reached"],"type":"object"},"goal":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"source":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"target":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"}},"required":["source","target","evidence_links"],"type":"object"},"maxItems":32,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3300,"minItems":1,"type":"array"},"hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","evidence_links"],"type":"object"},"maxItems":33,"minItems":1,"type":"array"}},"required":["hops","nodes","edges","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"lower_bound":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":100,"minimum":0,"type":"integer"},"total":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["offset","limit","items","returned","next_offset","total","truncated","lower_bound"],"type":"object"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":false,"type":"boolean"},"max_depth":{"maximum":32,"minimum":0,"type":"integer"},"max_paths":{"maximum":100,"minimum":1,"type":"integer"}},"required":["max_depth","max_paths","exhaustive"],"type":"object"},"shortest_hops":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"start":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"const":"truncated","type":"string"}},"required":["start","goal","explored","evidence_links","limitations","status","shortest_hops","search_scope","paths"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Build Call Path"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate explicit caller-declared hypotheses between exact static comparison findings and runtime comparison dimensions. Similar names or paths are never auto-matched, consistent cochange never proves causality, and unknown or truncated inputs remain unresolved.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"mappings":[{"hypothesis":{"expected_pattern":"static_only","statement":"Static implementation changed without terminal change."},"runtime":{"comparison_evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","dimension":"terminal"},"side_alignment":"left_to_left","static":{"comparison_evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","selector":{"dimension":"pseudocode","kind":"function"}}}],"offset":0,"runtime_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","evidence_links":["ev_0014950a3b67b96d5d182a51c5a271959828fe6a91db55fc507dd5a9c2a5ecaf","ev_5d45bc669ea10694f3bdf3b325e2048844da96a621b717ad252d667af53df590"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"exit":"unchanged","filesystem":"unchanged","first_divergence":{"status":"none"},"interaction":"unchanged","limitations":[],"process":"unchanged","protocol":"unchanged","shim":"unchanged","status":"unchanged","terminal":"unchanged"},"operation":"compare_process_captures","parameters":{"left_evidence_id":"ev_0014950a3b67b96d5d182a51c5a271959828fe6a91db55fc507dd5a9c2a5ecaf","left_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"right_evidence_id":"ev_5d45bc669ea10694f3bdf3b325e2048844da96a621b717ad252d667af53df590","right_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10}},"predicate_type":"rea.process-comparison/v3","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"schema_version":2,"subject":null}],"static_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":{"items":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null}],"limit":100,"next_offset":null,"offset":0,"total":2},"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":null,"left_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","limitations":[],"right_count":null,"right_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"calls","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"references","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"strings_names","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"cfg","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":1,"left_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","limitations":[],"right_count":1,"right_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","status":"unchanged","text_delta":null}],"function_match":{"left_name":"main","method":"symbol","right_name":"main","status":"matched"},"left_subject_sha256":"0000000000000000000000000000000000000000000000000000000000000000","limitations":[],"right_subject_sha256":"1111111111111111111111111111111111111111111111111111111111111111","status":"unknown","summary":{"changed":1,"truncated":0,"unchanged":6,"unknown":1}},"operation":"compare_functions","parameters":{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"schema_version":2,"subject":null}]}],"properties":{"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mappings":{"description":"Value for mappings.","items":{"additionalProperties":false,"properties":{"hypothesis":{"additionalProperties":false,"description":"Value for hypothesis.","properties":{"expected_pattern":{"description":"Expected pattern used to reject stale or mismatched input.","enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"description":"Value for statement.","maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"runtime":{"additionalProperties":false,"description":"Value for runtime.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"}},"required":["comparison_evidence_id","dimension"],"type":"object"},"side_alignment":{"description":"Value for side alignment.","enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"description":"Value for static.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"selector":{"description":"Value for selector.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","description":"Value for kind.","type":"string"},"logical_path":{"description":"Local filesystem path for logical.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"description":"Value for dimension.","enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","dimension"],"type":"object"}]}},"required":["comparison_evidence_id","selector"],"type":"object"}},"required":["static","runtime","side_alignment","hypothesis"],"type":"object"},"maxItems":500,"minItems":1,"type":"array"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_comparisons":{"description":"Value for runtime comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"static_comparisons":{"description":"Value for static comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["static_comparisons","runtime_comparisons","mappings"],"type":"object"},"kind":"session","name":"correlate_static_and_runtime","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"correlations":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["hypothesis","contradiction","unresolved_branch"],"type":"string"},"correlation_id":{"pattern":"^cor_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":2,"type":"array"},"hypothesis":{"additionalProperties":false,"properties":{"expected_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged","unknown","truncated"],"type":"string"},"runtime":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","dimension","status"],"type":"object"},"side_alignment":{"enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"selector":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","type":"string"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","dimension"],"type":"object"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","selector","status","conclusion_kind"],"type":"object"}},"required":["correlation_id","static","runtime","side_alignment","hypothesis","observed_pattern","classification","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":2,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"status":{"enum":["correlated","contradicted","unknown","truncated"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hypotheses":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["hypotheses","contradictions","unresolved"],"type":"object"}},"required":["status","summary","correlations","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Correlate Static And Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Verify a finite typed behavioral and structural specification against a canonical Evidence bundle. Pass means every declared claim has complete comparable authority—not global source equivalence; changed claims fail and missing, limited, or unresolved evidence stays unknown.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0,"specification":{"claims":[{"claim_id":"terminal-output","comparison_evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","dimension":"terminal","kind":"behavioral","title":"Terminal output remains equivalent"}],"name":"Terminal compatibility","schema_version":1}}],"properties":{"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["workspace_id","revision","revision_sha256","boundary_id"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"specification":{"description":"Value for specification.","properties":{"claims":{"description":"Value for claims.","items":{"oneOf":[{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"kind":{"const":"behavioral","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"structural-function","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"const":"overall","description":"Value for dimension.","type":"string"},"kind":{"const":"structural-artifact","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"}]},"maxItems":100,"minItems":1,"type":"array"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","name","claims"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["specification"],"type":"object"},"kind":"session","name":"verify_reconstruction","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"claims":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"kind":{"enum":["behavioral","structural-function","structural-artifact"],"type":"string"},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["claim_id","kind","dimension","status","observed_status","comparison_evidence_id","left_evidence_ids","right_evidence_ids","evidence_links","unknown_ids","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"claim_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["operation","rationale","claim_ids","unknown_ids"],"type":"object"},"maxItems":2000,"type":"array"},"specification_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"behavioral":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"failed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","passed","failed","unknown","behavioral","structural"],"type":"object"}},"required":["status","specification_sha256","summary","claims","recommended_probes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Verify Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"List current residual-unknown heads in deterministic ID order, with optional exact status, severity, and domain filters. Pages default to 100 items; while has_more is true, pass next_offset as offset and continue until false. This is read-only; unresolved, contradicted, and non-truth dispositions remain distinct.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0}],"properties":{"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"}},"type":"object"},"kind":"session","name":"list_unknowns","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"unknown":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"uri":{"pattern":"^rea:\\\\/\\\\/unknown\\\\/unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown","uri"],"type":"object"},"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"List Unknowns"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Create one deterministic residual unknown and immutable mutation evidence. Requires approved: true, validates all evidence and relationship references, and rejects duplicate stable identity.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"contradicting_evidence_ids":[],"domain":"protocol","question":"Does this branch require an unavailable external service?","recommended_probes":[{"operation":"capture_process_scenario","rationale":"Replay branch."}],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"severity":"medium","supporting_evidence_ids":[]}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"supporting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["question","severity","domain","required_authority","required_confidence","required_environment","recommended_probes","relationships","approved"],"type":"object"},"kind":"session","name":"record_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Record Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Append one immutable full-state revision and mutation evidence. Requires approved: true and exact expected_revision; stale concurrent writers fail instead of overwriting newer analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"contradicting_evidence_ids":[],"expected_revision":1,"recommended_probes":[],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"resolution":null,"severity":"medium","status":"investigating","supporting_evidence_ids":[],"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_revision":{"description":"Expected revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id","expected_revision","approved","status","severity","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution"],"type":"object"},"kind":"session","name":"update_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Update Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Revalidate the current residual-unknown head against live bundled evidence, exact authority/confidence/environment requirements, and revision integrity. Withdrawn and out-of-scope dispositions are not truth claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id"],"type":"object"},"kind":"session","name":"verify_unknown_resolution","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"truthVerified":{"type":"boolean"},"unknown":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"valid":{"type":"boolean"}},"required":["valid","truthVerified","unknown"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Verify Unknown Resolution"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Evaluate ordered HTTP and WebSocket events directly against one validated finite replay machine without opening sockets or launching a target. Returns every decision, a capture-value-free transition journal, one redacted action table entry per used transition, captured aliases, final state, and exact configured and consumed limits.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"events":[{"at_ms":0,"body":"{\\"token\\":\\"opaque\\"}","connection":"not_applicable","headers":{},"method":"POST","path":"/callback","protocol":"http"}],"machine":{"initial_state":"waiting","limits":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"max_transitions":1,"states":[{"max_visits":100000,"name":"waiting","terminal":false},{"max_visits":100000,"name":"complete","terminal":true}],"transitions":[{"actions":[{"body":"","headers":{},"status":204,"type":"http_response"}],"captures":[{"sensitive":true,"value":{"path":["token"],"source":"request_json"},"variable":"token"}],"from":"waiting","guards":[],"id":"accept_callback","max_uses":1,"priority":100,"to":"complete","trigger":{"body":null,"headers":{},"method":"POST","path":"/callback","protocol":"http"}}]}}],"properties":{"events":{"description":"Value for events.","items":{"oneOf":[{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"const":"not_applicable","description":"Value for connection.","type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"}]},"maxItems":10000,"type":"array"},"machine":{"additionalProperties":false,"description":"Value for machine.","properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"}},"required":["machine","events"],"type":"object"},"kind":"session","name":"run_replay_machine","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"decisions":{"items":{"additionalProperties":false,"properties":{"event_sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outcome":{"anyOf":[{"const":"matched","type":"string"},{"enum":["unmatched","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"}]},"transition_sequence":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["event_sequence","outcome","transition_sequence"],"type":"object"},"maxItems":10000,"type":"array"},"final_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"initial_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"properties":{"configured":{"additionalProperties":false,"properties":{"bytes":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"connections":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"duration_ms":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"messages":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"transitions":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["transitions","connections","messages","bytes","duration_ms"],"type":"object"},"usage":{"additionalProperties":false,"properties":{"admitted_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"last_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"messages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offered_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"transitions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offered_events","admitted_events","transitions","connections","messages","bytes","last_at_ms"],"type":"object"}},"required":["configured","usage"],"type":"object"},"schema_version":{"const":1,"type":"number"},"terminal":{"type":"boolean"},"transition_actions":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"type":"string"},"propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","type":"string"}},"required":["type","status","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"type":"array"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["transition_id","actions"],"type":"object"},"maxItems":2000,"type":"array"},"transition_journal":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"captured_aliases":{"items":{"additionalProperties":false,"properties":{"name":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"sensitive":{"type":"boolean"}},"required":["name","sensitive"],"type":"object"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"state_before":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","captured_aliases"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["schema_version","initial_state","final_state","terminal","decisions","transition_journal","transition_actions","limits"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Run Replay Machine"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Retain the current canonical Evidence v2 bundle as an immutable session resource. Returns a compact digest summary and exact opaque URI; copy that URI unchanged and call MCP resources/read (Codex: read_mcp_resource) for the full bundle. Repeating an unchanged snapshot is idempotent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"session","name":"snapshot_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"bundle_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"bundle_uri":{"pattern":"^rea:\\\\/\\\\/evidence-bundle\\\\/[a-f0-9]{64}$","type":"string"},"bundle_version":{"const":2,"type":"number"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scope":{"const":"session","type":"string"},"survives_session":{"const":false,"type":"boolean"},"unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["bundle_digest","bundle_version","bytes","records","unknowns","scope","survives_session","bundle_uri"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Snapshot Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Release one immutable session-retained Evidence v2 bundle by exact digest. This is the recovery operation when bounded bundle retention is exhausted; releasing an unknown digest is idempotent and reports released: false.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"bundle_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}],"properties":{"bundle_digest":{"description":"Value for bundle digest.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["bundle_digest"],"type":"object"},"kind":"session","name":"release_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"bundle_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"released":{"type":"boolean"}},"required":["bundle_digest","released"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Release Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compose the selected document, current address, and containing/current procedure into one provider-neutral result. The result reflects sequential provider observations, not an atomic cursor snapshot; a cursor outside any procedure returns procedure: null. Scalar navigation getters remain available for evaluation and compatibility.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"get_navigation_context","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"document":{"type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["document","address","procedure"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Get Navigation Context"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one explicit reproducible address for its analyzed name, containing procedure, regular and inline comments, and matching bookmarks. Each unsupported facet returns a typed unavailable outcome; xrefs, assembly, and pseudocode remain separate bounded follow-ups.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"required":["address"],"type":"object"},"kind":"session","name":"inspect_address_context","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"bookmarks":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"document":{"anyOf":[{"type":"string"},{"type":"null"}]},"inline_comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"name":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"procedure":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]}},"required":["address","document","name","procedure","comment","inline_comment","bookmarks"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Inspect Address Context"}]}'; + '{"auxiliaryProviders":[{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inventory_artifact","pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inspect_artifact","pagination":"none","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":true,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"extract_artifact","pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null}],"identity":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_macho","pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_signature","pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_plist","pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"list_architectures","pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":30000},"operation":"demangle_swift","pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null}],"identity":{"id":"native-macos","name":"macOS native inspection utilities","version":null}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"limitations":["This capability inventories PE/CLI identity only; inspect_managed_members admits bounded metadata members, signatures, and CIL anchors.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":null},"operation":"inspect_managed_artifact","pagination":"none","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"limitations":["This capability decodes bounded 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."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":null},"operation":"inspect_managed_members","pagination":"none","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"limitations":["This capability inventories managed declarations for native boundaries only; native exports, thunks, and addresses require separate native-provider evidence.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":null},"operation":"inspect_managed_native_boundaries","pagination":"none","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null}],"identity":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"}}],"catalog":[{"analysisOperation":"address_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve the primary analyzed name at a code or data address. Headless providers require an explicit address; GUI providers may default to their current cursor. Null means the provider has no primary name at that address.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"address_name","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"comment","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_address","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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. Use procedure_info or analyze_function next; this depends on GUI cursor state and is not an exhaustive lookup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_procedure","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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. Use list_documents before switching when several documents are open.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_document","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"goto_address","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"inline_comment","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_bookmarks","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_documents","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_names","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_procedures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_segments","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 reports charset, missing-terminator status, byte length, and explicit value truncation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"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","zip","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 Strings"},{"analysisOperation":"next_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the next analyzed object address after an explicit address or current cursor. This is a navigation primitive, not instruction-flow or CFG analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"next_address","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"prev_address","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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; use the result before xrefs, assembly, or decompilation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_address","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_assembly","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callees","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callers","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 bounded metadata for one procedure identified by symbol or address: entrypoint, signature, locals, size, and block count. Follow with decompilation or assembly for behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_info","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"entrypoint":{"type":"string"},"length":{"minimum":0,"type":"number"},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","entrypoint","basicblock_count","length","signature","locals","classification"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Procedure Info"},{"analysisOperation":"read_function_instructions","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read every raw instruction for an analyzed procedure without decompilation, caller discovery, or whole-program string/name scans. 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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"read_function_instructions","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"}},"required":["procedure","instructions","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 at most 4,096 analyzed bytes from one provider-normalized virtual address. The hexadecimal payload reports the exact returned length; incomplete reads remain explicit and unsupported provider APIs return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","length":16}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"length":{"default":256,"description":"Value for length.","maximum":9007199254740991,"minimum":1,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"read_bytes","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":4096,"minimum":1,"type":"integer"},"returned_bytes":{"maximum":4096,"minimum":0,"type":"integer"}},"required":["address","requested_bytes","returned_bytes","bytes_hex","complete"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Read Bytes"},{"analysisOperation":"address_to_file_offset","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Map one provider-normalized virtual address to its original nonnegative file offset. Unmapped addresses fail explicitly, and providers without an authoritative mapping API return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"address_to_file_offset","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_references","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"references":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"}},"required":["procedure","direction","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_pseudo_code","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_containing_procedure","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]}},"required":["result","evidence_id","evidence"],"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 bounded regex pattern to search for","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_procedures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 bounded regex pattern to search for","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_strings","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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; read it back with address_name before relying on it.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","name":"entry"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","name"],"type":"object"},"kind":"official-proxy","name":"set_address_name","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 an address/name map and return per-address success booleans. This mutates analysis metadata; use for bounded batches and verify failures individually.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"names":{"0x1000":"entry"}}],"properties":{"document":{"description":"The document name","type":"string"},"names":{"additionalProperties":{"type":"string"},"description":"Value for names.","propertyNames":{"type":"string"},"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["names"],"type":"object"},"kind":"official-proxy","name":"set_addresses_names","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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. This mutates navigation metadata; verify with list_bookmarks and do not treat bookmarks as binary evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"set_bookmark","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_comment","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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; call list_documents first and prefer explicit document inputs where reproducibility matters.","effects":{"accessesNetwork":false,"changesUiState":true,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"document":"fixture"}],"properties":{"document":{"description":"Exact provider document or program identity.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["document"],"type":"object"},"kind":"official-proxy","name":"set_current_document","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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; confirm with inline_comment.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","comment":"calls parser"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"comment":{"description":"Exact analyst comment text to write.","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_inline_comment","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"unset_bookmark","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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, defaulting to the current cursor. Use to connect strings, globals, selectors, and functions; bare addresses are untyped and indirect references may be incomplete.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"xrefs","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":"swift_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover legacy-mangled Swift class procedures by scanning analyzed procedures; returns every matching entry. Use analyze_swift_types for other Swift kinds.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"swift_classes","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":"Swift Classes"},{"analysisOperation":"get_objc_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate every Objective-C class label, optionally filtering by literal substring; inspect matching metadata and references next.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"get_objc_classes","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 every Objective-C and Swift protocol label; use xrefs or analyze_function to connect a protocol to implementations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"enhanced","name":"get_objc_protocols","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 ok/error variants and aggregate counts; use analyze_function for a richer single-function dossier.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"addresses":[]}],"properties":{"addresses":{"default":[],"description":"Ordered provider-normalized procedure addresses to analyze.","items":{"description":"A provider-normalized procedure address","type":"string"},"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","zip","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","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"succeeded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","total","succeeded","failed"],"type":"object"}},"required":["result","evidence_id","evidence"],"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","zip","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","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Get Call Graph"},{"analysisOperation":"analyze_swift_types","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Categorize all analyzed procedure names into Swift classes, structs, enums, protocols, extensions, and other 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":[{}],"properties":{},"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","zip","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 through the bound provider\'s exhaustively paged name inventory and return a resolved or unresolved result. Unresolved names use the stable name_not_found reason; this compact xref workflow returns address-only projections.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"name":"malloc"}],"properties":{"name":{"description":"Exact name used by this operation.","type":"string"}},"required":["name"],"type":"object"},"kind":"enhanced","name":"find_xrefs_to_name","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":"Use immediately after opening a target to summarize the document, every segment with its length, and exhaustive procedure/string 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":[{}],"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","zip","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":"Return one complete function dossier inline, including identity, provider-specific pseudocode and assembly, comments, calls, references, referenced strings/names, local CFG blocks, and any 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","zip","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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"callers":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"limitations":{"default":[],"items":{"type":"string"},"type":"array"},"native_api":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"minLength":1,"type":"string"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["available","reason","residual_unknowns"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"calling_convention":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-and-stack-variables","compiler-generated-control-flow","pointer-arithmetic","pseudocode"],"type":"string"},"type":"array"},"jump_tables":{"items":{"additionalProperties":false,"properties":{"data_sources":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"confidence":{"enum":["low","medium","high"],"type":"string"},"entry_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"entry_size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"provenance":{"enum":["ghidra-decompiler-load-table","ghidra-dispatch-block-data-reference"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"role":{"const":"parameter","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"type":"null"},"ordinal":{"type":"null"},"role":{"const":"return","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},{"type":"null"}],"default":null},"outgoing_references":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","classification","signature","locals"],"type":"object"},"pseudocode":{"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","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":"Reconstruct one native function boundary with structured return/parameter types, 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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record unsupported native API branches durably","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"inspect_native_api","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"role":{"const":"parameter","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"type":"null"},"ordinal":{"type":"null"},"role":{"const":"return","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},"procedure":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["address","name"],"type":"object"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"type":"array"},"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; unknown_registry_approved: true records 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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"trace_feature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"find_code_for_string","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","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"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record unresolved provider results durably","type":"boolean"}},"required":["start"],"type":"object"},"kind":"enhanced","name":"trace_call_path","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__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","zip","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","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]}},"required":["address","error"],"type":"object"},"type":"array"},"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":"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","zip","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"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"segments":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"initial_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"maximum_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"name":{"type":"string"},"sections":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flags":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"segment":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["segment","name","address","size","file_offset","alignment","flags"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"vm_address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"vm_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","vm_address","vm_size","file_offset","file_size","maximum_permissions","initial_permissions","sections"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_size":{"anyOf":[{"anyOf":[{"const":32,"type":"number"},{"const":64,"type":"number"}]},{"type":"null"}]}},"required":["format","endian","word_size","file_type","flags","uuid","entrypoints","architectures","build_metadata","load_commands","dependencies","imports","exports","segments","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Macho"},{"analysisOperation":"inspect_signature","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect the active artifact\'s code-signing identity, hashes, authorities, requirements, entitlements, hardened-runtime state, and bounded command provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"inspect_signature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"signed":{"type":"boolean"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["signed","identifier","team_identifier","format","cdhashes","hash_algorithms","authorities","designated_requirement","entitlements","timestamp","hardened_runtime","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Signature"},{"analysisOperation":"inspect_plist","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Parse a plist at a bounded relative path beneath the active artifact container. Symlink and traversal escapes are rejected; output is normalized JSON rather than plutil text.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"relative_path":"Contents/Info.plist"}],"properties":{"relative_path":{"default":"Contents/Info.plist","description":"Local filesystem path for relative.","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","zip","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"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"source_path":{"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["format","value","bundle","source_path","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Plist"},{"analysisOperation":"list_architectures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List thin or universal Mach-O slices with offsets, sizes, alignment, explicit coverage, and bounded native-tool provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"list_architectures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"}},"required":["architectures","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Architectures"},{"analysisOperation":"demangle_swift","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Demangle an ordered bounded batch of Swift symbols without requiring Hopper. Each input returns demangled, unchanged, or invalid status.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"symbols":["$s4Test3fooyyF"]}],"properties":{"symbols":{"description":"Ordered bounded Swift symbols to demangle.","items":{"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","zip","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"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"symbols":{"items":{"additionalProperties":false,"properties":{"input":{"type":"string"},"output":{"type":"string"},"status":{"enum":["demangled","unchanged","invalid"],"type":"string"}},"required":["input","output","status"],"type":"object"},"type":"array"}},"required":["symbols","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Demangle Swift"},{"analysisOperation":"inventory_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inventory the complete content-addressed artifact graph in one call. This tool accepts no path; in a target-free session open the target first. It does not extract or mount by default.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"type":"object"},{"properties":{"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"required":["integrity_policy","integrity_continue_approved"],"type":"object"}],"examples":[{}],"type":"object"},"kind":"artifact-provider","name":"inventory_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","zip","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":{"edges":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"child_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"edge_id":{"pattern":"^edge_[a-f0-9]{64}$","type":"string"},"logical_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"producer":{"anyOf":[{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},{"type":"null"}]},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"}},"required":["edge_id","ordinal","parent_artifact_id","child_artifact_id","relation","occurrence_id","logical_path","producer"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"integrity_contradictions":{"default":[],"items":{"additionalProperties":false,"properties":{"contradiction_id":{"pattern":"^ic_[a-f0-9]{64}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"entry_kind":{"enum":["file","slice"],"type":"string"},"limitations":{"items":{"type":"string"},"minItems":1,"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"provenance":{"const":"container-integrity-metadata-versus-observed-bytes","type":"string"},"trust":{"const":"observed-untrusted","type":"string"},"unpacked":{"type":"boolean"}},"required":["contradiction_id","occurrence_id","parent_artifact_id","logical_path","declared_sha256","observed_sha256","entry_kind","unpacked","trust","provenance","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["manifest_id","root_artifact_id","root_sha256","root_format","graph_sha256","node_count","occurrence_count","edge_count"],"type":"object"},"nodes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"content_state":{"enum":["materialized","embedded","virtual"],"type":"string"},"executable":{"type":"boolean"},"format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"kind":{"enum":["container","executable","dynamic-library","framework","native-addon","javascript","source-map","plist","entitlements","resource","universal-slice","package-metadata","unknown"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"media_type":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["artifact_id","kind","format","sha256","size","media_type","architecture","executable","content_state","limitations"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"occurrences":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"compressed_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"declared_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"encrypted":{"type":"boolean"},"entry_kind":{"enum":["file","directory","symlink","slice"],"type":"string"},"executable":{"type":"boolean"},"hash_status":{"enum":["verified","mismatched","not-hashed-limit","unavailable"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"source_location":{"anyOf":[{"additionalProperties":false,"properties":{"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","length"],"type":"object"},{"type":"null"}]}},"required":["occurrence_id","artifact_id","parent_occurrence_id","logical_path","entry_kind","declared_size","compressed_size","executable","encrypted","hash_status","source_location","limitations"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"provenance":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","nodes","occurrences","edges","limits","provenance","integrity_contradictions","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inventory Artifact"},{"analysisOperation":"inspect_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inspect the complete artifact inventory in one cancellable substep. This tool accepts no path; in a target-free session open the target first. Returns the full substep Evidence, observations, derived relationships, hypotheses, contradictions, unexplored branches, limitations, and format-specific next probes. Any substep failure fails the whole call.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"type":"object"},{"properties":{"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"required":["integrity_policy","integrity_continue_approved"],"type":"object"}],"examples":[{}],"type":"object"},"kind":"artifact-provider","name":"inspect_artifact","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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":{"maxLength":4096,"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":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"},"relationship_id":{"pattern":"^air_[a-f0-9]{64}$","type":"string"},"source_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"target_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"}},"required":["relationship_id","relation","source_artifact_id","target_artifact_id","occurrence_id","logical_path","evidence_id"],"type":"object"},"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"},"maxItems":8,"minItems":1,"type":"array"},"confidence":{"enum":["medium","low"],"type":"string"},"hypothesis_id":{"pattern":"^aih_[a-f0-9]{64}$","type":"string"},"limitation":{"maxLength":4096,"minLength":1,"type":"string"},"statement":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["hypothesis_id","statement","confidence","basis_evidence_ids","limitation"],"type":"object"},"type":"array"},"inspection_id":{"pattern":"^ai_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"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":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"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":{"maxLength":4096,"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":{"maxLength":128,"minLength":1,"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["manifest_id","root_artifact_id","root_sha256","root_format"],"type":"object"},"substeps":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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","zip","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":{"maxLength":4096,"minLength":1,"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"next_probe":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},{"type":"null"}]},"reason":{"enum":["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 selected graph artifacts beneath an explicit output root. Requires approval, rejects traversal and symlink escapes, never overwrites, enforces bomb limits, and verifies cleanup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"occurrence_ids":["occ_0000000000000000000000000000000000000000000000000000000000000000"],"output_root":"/tmp/rea-extracted"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"occurrence_ids":{"description":"Value for occurrence ids.","items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"output_root":{"description":"Approved canonical filesystem output root.","minLength":1,"type":"string"}},"required":["approved","output_root","occurrence_ids"],"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","zip","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":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"bytes_written":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"created":{"type":"boolean"},"relative_path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["artifact_id","relative_path","sha256","bytes_written","created"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"cleanup":{"additionalProperties":false,"properties":{"attempted":{"type":"boolean"},"residual_paths":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":500,"type":"array"},"verified":{"type":"boolean"}},"required":["attempted","verified","residual_paths"],"type":"object"},"containment_verified":{"type":"boolean"},"extraction_manifest":{"additionalProperties":false,"properties":{"extraction_id":{"pattern":"^aex_[a-f0-9]{64}$","type":"string"},"files_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_root_alias":{"const":"$OUTPUT_ROOT","type":"string"},"selected_occurrence_ids":{"items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"source_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"}},"required":["extraction_id","source_manifest_id","selected_occurrence_ids","files_sha256","output_root_alias"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"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":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","extraction_manifest","output_root","artifacts","containment_verified","cleanup","limits","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Extract Artifact"},{"analysisOperation":"inspect_managed_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Open and classify an explicit managed PE/CLI path, or inspect the active managed target, then inventory exact assembly/module identity, target framework evidence, references, resources, and custom attributes without loading or executing target code. Returns 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","zip","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","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"stream_names":{"items":{"type":"string"},"type":"array"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","stream_names","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"pe":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"characteristics":{"maximum":65535,"minimum":0,"type":"integer"},"cli":{"anyOf":[{"additionalProperties":false,"properties":{"entry_point":{"additionalProperties":false,"properties":{"kind":{"enum":["metadata-token","native-rva","none"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"flag_names":{"items":{"type":"string"},"type":"array"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"header_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"header_size":{"maximum":9007199254740991,"minimum":72,"type":"integer"},"managed_native_header_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"managed_native_header_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"metadata_rva":{"maximum":4294967295,"minimum":1,"type":"integer"},"metadata_size":{"maximum":4294967295,"minimum":1,"type":"integer"},"ready_to_run_signature":{"type":"boolean"},"resources_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"resources_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"runtime_version":{"type":"string"},"strong_name_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"strong_name_size":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["header_offset","header_size","runtime_version","flags","flag_names","entry_point","metadata_rva","metadata_size","resources_rva","resources_size","strong_name_rva","strong_name_size","managed_native_header_rva","managed_native_header_size","ready_to_run_signature"],"type":"object"},{"type":"null"}]},"machine":{"maximum":65535,"minimum":0,"type":"integer"},"machine_hex":{"pattern":"^0x[0-9a-f]{4}$","type":"string"},"optional_header":{"enum":["pe32","pe32-plus"],"type":"string"},"section_count":{"maximum":96,"minimum":1,"type":"integer"}},"required":["machine","machine_hex","architecture","optional_header","section_count","characteristics","cli"],"type":"object"},"references":{"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, member-result-v1 decoded-instruction-tuple hashes, separately reported exception regions, call edges, and field-access anchors without loading or executing target code. Metadata tokens are reported as build-local coordinates bound to the artifact SHA-256 and MVID; the v1 tuple hash does not resolve them or fully commit control flow.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"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","zip","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","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"field_accesses":{"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","too-large"],"type":"string"},"truncated_instructions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","header_format","rva","file_offset","max_stack","init_locals","local_var_sig_token","il_size","il_sha256","normalized_il_sha256","instruction_count","decoded_instruction_count","truncated_instructions","opcode_counts","anchors","exception_regions","issue"],"type":"object"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"declaring_type_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"impl_flags":{"maximum":65535,"minimum":0,"type":"integer"},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","declaring_type_token","declaring_type","name","rva","impl_flags","flags","signature","body"],"type":"object"},"type":"array"},"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","zip","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","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"identity_scope":{"additionalProperties":false,"properties":{"requires_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requires_mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"token_identity":{"const":"build-local","type":"string"}},"required":["token_identity","requires_artifact_sha256","requires_mvid"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"module_refs":{"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-v1/signature and structural method-shape tiers. Names are reported as observations but are not used as a matching basis; metadata tokens remain build-local coordinates bound to each artifact SHA-256 and MVID, and the v1 tuple digest does not itself remap them.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_732e69dfc732739a6e3790a5c81435ac5bb7b69c8f9f024a049f5a7030797461","right_evidence_id":"ev_e92f41e7770ae3cb81938608f21dbb569d49557b9261c1f0981b2d4752d937c8"}],"properties":{"left_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"application","name":"compare_managed_members","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"version":{"const":1,"type":"number"}},"required":["name","version","token_identity","name_matching"],"type":"object"},"comparison_id":{"pattern":"^mmc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_status":{"enum":["complete","partial","unavailable"],"type":"string"},"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"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":{"maxLength":4096,"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"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"prefixItems":[],"type":"array"},"candidate_right_tokens":{"prefixItems":[],"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"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"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":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"managed_boundaries_evidence_id":"ev_6f08c6dde979ec4be87f4d5a541c646bab921df7be470c872d64809e77aa1d0c","native_observation_evidence_ids":["ev_f2c442c1610e303b60cb696d14570f74046380c146a91b9341c435c519439947"]}],"properties":{"managed_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"native_observation_evidence_ids":{"description":"Unique session-owned native observation Evidence IDs","items":{"description":"Session-owned inspect_macho or analyze_function Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["managed_boundaries_evidence_id","native_observation_evidence_ids"],"type":"object"},"kind":"application","name":"verify_managed_native_boundaries","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"version":{"const":1,"type":"number"}},"required":["name","version","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":{"maxLength":4096,"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":{"maxLength":4096,"minLength":1,"type":"string"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unresolved","reason"],"type":"object"},"native_observations":{"additionalProperties":false,"properties":{"accepted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symbols":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"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":{"maxLength":4096,"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":{"maxLength":4096,"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":{"prefixItems":[],"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":{"maxLength":4096,"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":{"maxLength":4096,"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 member-result-v1 decoded-IL tuple hash, records the decompiler identity and options, and marks C# or pseudocode as analyst inference rather than canonical byte observation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"decompiler":{"executable_sha256":null,"family":"ilspy","name":"ilspycmd","options":["--disable-updatecheck","--type","Example.Program"],"version":"9.1.0.7988"},"methods":[{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","reconstruction":{"end_line":1,"kind":"decompiled-csharp","language":"csharp","source_path":"/examples/Example.Program.cs","start_line":1,"text":"internal static void Main() { }"},"signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"}],"notes":["Synthetic example only; decompiler output is imported as inference."],"static_members_evidence_id":"ev_864719caa02a5f8d7288006484d3154334a50a92165ec0ac4cd3af91bc99e1a1"}],"properties":{"decompiler":{"additionalProperties":false,"description":"Value for decompiler.","properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of executable."},"family":{"description":"Value for family.","enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"description":"Value for options.","items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["name","version","family","executable_sha256"],"type":"object"},"methods":{"description":"Value for methods.","items":{"additionalProperties":false,"properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"reconstruction":{"additionalProperties":false,"description":"Value for reconstruction.","properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for end line."},"kind":{"description":"Value for kind.","enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"description":"Value for language.","enum":["csharp","il","pseudocode"],"type":"string"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Local filesystem path for source."},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for start line."},"text":{"description":"Value for text.","maxLength":65536,"minLength":1,"type":"string"},"text_sha256":{"description":"Exact SHA-256 digest of text.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text"],"type":"object"},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256","reconstruction"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"default":[],"description":"Value for notes.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["decompiler","methods","static_members_evidence_id"],"type":"object"},"kind":"application","name":"import_managed_reconstruction","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"}]},"family":{"enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"options_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["name","version","family","executable_sha256","options","options_sha256"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"methods":{"items":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reconstruction":{"additionalProperties":false,"properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"kind":{"enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"enum":["csharp","il","pseudocode"],"type":"string"},"line_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"text":{"maxLength":65536,"minLength":1,"type":"string"},"text_length":{"maximum":65536,"minimum":1,"type":"integer"},"text_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text","text_sha256","text_length","line_count","source_path","start_line","end_line"],"type":"object"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"validation":{"additionalProperties":false,"properties":{"canonical_observation":{"const":false,"type":"boolean"},"confidence_floor":{"const":"inference","type":"string"},"exact_build_required":{"const":true,"type":"boolean"},"matched_static_member":{"const":true,"type":"boolean"}},"required":["matched_static_member","exact_build_required","canonical_observation","confidence_floor"],"type":"object"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","reconstruction","validation"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"phase":{"const":"reconstruction-import","type":"string"},"reconstruction_id":{"pattern":"^mre_[a-f0-9]{64}$","type":"string"},"static_observation":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","artifact_path","byte_length","module_name","mvid","metadata_status"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"decompiled_csharp_methods":{"maximum":50,"minimum":0,"type":"integer"},"decompiled_il_methods":{"maximum":50,"minimum":0,"type":"integer"},"imported_methods":{"maximum":50,"minimum":1,"type":"integer"},"pseudocode_methods":{"maximum":50,"minimum":0,"type":"integer"},"total_text_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["imported_methods","decompiled_csharp_methods","decompiled_il_methods","pseudocode_methods","total_text_bytes"],"type":"object"}},"required":["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 separately authorized managed runtime-correlation admission plan from authenticated inspect_managed_members Evidence. The operation is default-disabled, requires the managed_runtime permission ceiling and grant, locks the exact artifact SHA-256, MVID, method signature, and limited member-result-v1 decoded-IL tuple hash, distinguishes attach/load/debugger/reflection/instrumentation effects, and records that no target code was executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"bounds":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"host":{"architecture":"x86_64","clr_family":"dotnet","os":"linux"},"method":{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"},"requested_effect":"attach","static_members_evidence_id":"ev_864719caa02a5f8d7288006484d3154334a50a92165ec0ac4cd3af91bc99e1a1"}],"properties":{"bounds":{"additionalProperties":false,"default":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"description":"Value for bounds.","properties":{"allow_network":{"const":false,"default":false,"description":"Value for allow network.","type":"boolean"},"allow_ui":{"const":false,"default":false,"description":"Value for allow ui.","type":"boolean"},"max_output_bytes":{"default":65536,"description":"Maximum permitted output bytes for this operation.","maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"description":"Maximum permitted threads for this operation.","maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"type":"object"},"host":{"additionalProperties":false,"description":"Value for host.","properties":{"architecture":{"description":"Value for architecture.","enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"description":"Value for clr family.","enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"description":"Value for os.","enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"method":{"additionalProperties":false,"description":"Value for method.","properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256"],"type":"object"},"requested_effect":{"description":"Value for requested effect.","enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["method","requested_effect","host","static_members_evidence_id"],"type":"object"},"kind":"application","name":"plan_managed_runtime_correlation","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"authority_model":{"additionalProperties":false,"properties":{"capability":{"const":"managed_runtime","type":"string"},"default_enabled":{"const":false,"type":"boolean"},"per_call_approval_required":{"const":true,"type":"boolean"},"permission_grant_id":{"minLength":1,"type":"string"}},"required":["capability","permission_grant_id","default_enabled","per_call_approval_required"],"type":"object"},"bounds":{"additionalProperties":false,"properties":{"allow_network":{"const":false,"default":false,"type":"boolean"},"allow_ui":{"const":false,"default":false,"type":"boolean"},"max_output_bytes":{"default":65536,"maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"maximum":60000,"minimum":1,"type":"integer"}},"required":["timeout_ms","max_threads","max_output_bytes","allow_network","allow_ui"],"type":"object"},"correlation_id":{"pattern":"^mrc_[a-f0-9]{64}$","type":"string"},"effect_taxonomy":{"additionalProperties":false,"properties":{"attaches_process":{"type":"boolean"},"instruments_code":{"type":"boolean"},"invokes_target_code":{"const":false,"type":"boolean"},"loads_target":{"type":"boolean"},"uses_debugger":{"type":"boolean"},"uses_reflection":{"type":"boolean"}},"required":["attaches_process","loads_target","uses_debugger","uses_reflection","instruments_code","invokes_target_code"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"method_lock":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"body_status":{"enum":["present","partial","absent","malformed","too-large"],"type":"string"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"exact_build_required":{"const":true,"type":"boolean"},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","body_status","exact_build_required"],"type":"object"},"phase":{"const":"admission-plan","type":"string"},"requested_runtime":{"additionalProperties":false,"properties":{"effect":{"enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"executable_path":{"minLength":1,"type":"string"},"filesystem":{"const":"owned-artifacts-only","type":"string"},"host":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"network":{"const":"none","type":"string"}},"required":["effect","host","executable_path","network","filesystem"],"type":"object"},"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","authority_model","static_observation","method_lock","requested_runtime","effect_taxonomy","bounds","unsupported_until_executor_exists","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Plan Managed Runtime Correlation"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Project authenticated managed artifact, member, and native-boundary Evidence into the provider-neutral application graph without executing managed code, loading assemblies, or translating managed metadata tokens to native addresses. The graph preserves managed static observations as managed-specific nodes linked to source Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_artifact_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_members_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_native_boundaries_evidence_id"],"type":"object"}],"examples":[{"managed_members_evidence_id":"ev_864719caa02a5f8d7288006484d3154334a50a92165ec0ac4cd3af91bc99e1a1"}],"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","zip","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"projection_id":{"pattern":"^magp_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"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 every page target from an approved user-owned loopback Chrome DevTools Protocol endpoint whose current URL matches an approved exact origin. URL credentials, query values, and fragments are redacted.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","approved"],"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","zip","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 approved page target through CDP without evaluating JavaScript, navigating, clicking, closing, or mutating the page. Returns bounded DOM structure, accessibility, scripts, resources, attach-window network and console metadata, workers, and redacted storage inventory as Evidence v2.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":false,"default":false,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved"],"type":"object"}],"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","console_text_approved":false,"include_accessibility_text":false,"include_console_text":false,"include_json_body_shapes":false,"include_script_sources":false,"include_storage_fingerprints":false,"include_storage_keys":false,"include_websocket_shapes":false,"json_body_schema_approved":false,"limits":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"observation_ms":500,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS","websocket_shape_approved":false}],"type":"object"},"kind":"browser-provider","name":"inspect_web_page","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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","truncated","unavailable"],"type":"string"},"truncated_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"properties":{"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"items":{"additionalProperties":false,"properties":{"argument_types":{"items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"text_capture":{"additionalProperties":false,"properties":{"retained_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"items":{"additionalProperties":false,"properties":{"argument_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"type":{"type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"type":"number"},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"attribute_names":{"items":{"type":"string"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"type":"string"},"node_type":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"items":{"additionalProperties":false,"properties":{"frame_id":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"agent_hints":{"items":{"additionalProperties":false,"properties":{"declaration":{"type":"string"},"mechanism":{"enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"items":{"additionalProperties":false,"properties":{"attribute":{"enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"type":"boolean"},"responses":{"items":{"additionalProperties":false,"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"csp":{"additionalProperties":false,"properties":{"directives":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"sources":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"items":{"additionalProperties":false,"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}]},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}]},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}]},"rel":{"items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"policies":{"additionalProperties":false,"properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}]},"coop":{"anyOf":[{"type":"string"},{"type":"null"}]},"corp":{"anyOf":[{"type":"string"},{"type":"null"}]},"permissions_policy_features":{"items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}]},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"type":"string"},"url":{"type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"type":"boolean"},"requests":{"items":{"additionalProperties":false,"properties":{"body_shapes":{"additionalProperties":false,"properties":{"request":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"response":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"status":{"enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"initiator":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","url","line","column"],"type":"object"},"method":{"type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"url":{"type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"items":{"additionalProperties":false,"properties":{"direction":{"enum":["sent","received"],"type":"string"},"opcode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"additionalProperties":false,"properties":{"format":{"enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}]},"request_id":{"type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"mime_type":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_key":{"pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"scripts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"is_module":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_reconciliation":{"oneOf":[{"additionalProperties":false,"properties":{"resource_key":{"type":"string"},"status":{"const":"exact","type":"string"}},"required":["status","resource_key"],"type":"object"},{"additionalProperties":false,"properties":{"candidate_resource_keys":{"items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"const":"no_exact_sanitized_url","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["script_key","frame_id","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"additionalProperties":false,"properties":{"cache_names":{"items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"items":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"identity_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","type":"string"},"fingerprints_complete":{"default":false,"type":"boolean"},"indexed_db_names":{"items":{"type":"string"},"type":"array"},"local_storage_keys":{"items":{"type":"string"},"type":"array"},"origin":{"type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"session_storage_keys":{"items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"values_redacted":{"const":true,"type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","content_fingerprints","fingerprint_algorithm","fingerprints_complete","values_redacted"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"origin":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"target_id":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","url","origin","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["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 explicitly approved JavaScript source from one approved CDP page and statically derive a bounded chunk graph, route and endpoint candidates, vendor fingerprints, page-declared WebMCP metadata, and optional separately approved source-map evidence. JavaScript is parsed but never executed.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"analysis_limits":{"default":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"description":"Value for analysis limits.","properties":{"max_ast_nodes":{"default":250000,"description":"Maximum permitted ast nodes for this operation.","maximum":2000000,"minimum":1,"type":"integer"},"max_findings":{"default":1000,"description":"Maximum permitted findings for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_original_sources":{"default":2000,"description":"Maximum permitted original sources for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_source_map_bytes":{"default":4194304,"description":"Maximum permitted source map bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_source_map_mappings":{"default":10000,"description":"Maximum permitted source map mappings for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_source_maps":{"default":100,"description":"Maximum permitted source maps for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_total_source_map_bytes":{"default":16777216,"description":"Maximum permitted total source map bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"}},"type":"object"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"fetch_source_maps":{"const":false,"default":false,"description":"Value for fetch source maps.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"source_map_fetch_approved":{"const":false,"default":false,"description":"Explicit operator approval for source map fetch.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"analysis_limits":{"default":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"description":"Value for analysis limits.","properties":{"max_ast_nodes":{"default":250000,"description":"Maximum permitted ast nodes for this operation.","maximum":2000000,"minimum":1,"type":"integer"},"max_findings":{"default":1000,"description":"Maximum permitted findings for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_original_sources":{"default":2000,"description":"Maximum permitted original sources for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_source_map_bytes":{"default":4194304,"description":"Maximum permitted source map bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_source_map_mappings":{"default":10000,"description":"Maximum permitted source map mappings for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_source_maps":{"default":100,"description":"Maximum permitted source maps for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_total_source_map_bytes":{"default":16777216,"description":"Maximum permitted total source map bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"}},"type":"object"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"fetch_source_maps":{"const":true,"description":"Value for fetch source maps.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"source_map_fetch_approved":{"const":true,"description":"Explicit operator approval for source map fetch.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved","fetch_source_maps","source_map_fetch_approved"],"type":"object"}],"examples":[{"allowed_origins":["https://app.example.test"],"analysis_limits":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","fetch_source_maps":false,"include_accessibility_text":false,"include_script_sources":true,"include_storage_keys":false,"observation_ms":500,"source_capture_approved":true,"source_map_fetch_approved":false,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"type":"object"},"kind":"browser-provider","name":"analyze_web_bundle","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text_available":{"const":true,"type":"boolean"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text_available"],"type":"object"},"type":"array"},"target_url":{"type":"string"}},"required":["target_url","scripts_observed","scripts_analyzed","source_artifacts"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"dropped_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete_within_limits","truncated","partial"],"type":"string"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","parsed_scripts","parse_failures","visited_ast_nodes","dropped_findings"],"type":"object"},"inferences":{"items":{"additionalProperties":false,"properties":{"basis":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"detector":{"type":"string"},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","artifact_sha256","line","column","detector"],"type":"object"},"minItems":1,"type":"array"},"confidence":{"enum":["low","medium","high"],"type":"string"},"kind":{"enum":["vendor_fingerprint","route_framework","bundle_runtime"],"type":"string"},"value":{"type":"string"}},"required":["kind","value","confidence","basis"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observations":{"additionalProperties":false,"properties":{"chunks":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"from_script_key":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require","worker_import"],"type":"string"},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"resolved_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_script_key","kind","specifier","resolved_url","location"],"type":"object"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"script_key":{"type":"string"},"url":{"type":"string"}},"required":["script_key","url","artifact_sha256","bytes"],"type":"object"},"type":"array"}},"required":["nodes","edges"],"type":"object"},"endpoints":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"routes":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"source_maps":{"additionalProperties":false,"properties":{"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dropped_script_keys":{"items":{"type":"string"},"type":"array"},"items":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"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":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"source":{"type":"string"}},"required":["source","artifact"],"type":"object"},"type":"array"},"script_key":{"type":"string"},"status":{"const":"included","type":"string"}},"required":["script_key","declared_url","artifact","original_sources","original_module_edges","mappings","status","limitation"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"declared_url":{"type":"string"},"limitation":{"type":"string"},"mappings":{"items":{"additionalProperties":false,"properties":{"generated_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"generated_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"original_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"type":"string"}},"required":["generated_line","generated_column","source","original_line","original_column","name"],"type":"object"},"type":"array"},"original_module_edges":{"items":{"additionalProperties":false,"properties":{"from_source":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require"],"type":"string"},"resolved_source":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_source","kind","specifier","resolved_source"],"type":"object"},"type":"array"},"original_sources":{"items":{"additionalProperties":false,"properties":{"artifact":{"anyOf":[{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"source":{"type":"string"}},"required":["source","artifact"],"type":"object"},"type":"array"},"script_key":{"type":"string"},"status":{"const":"truncated","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":{"prefixItems":[],"type":"array"},"original_module_edges":{"prefixItems":[],"type":"array"},"original_sources":{"prefixItems":[],"type":"array"},"script_key":{"type":"string"},"status":{"enum":["fetch_failed","invalid","policy_filtered","truncated"],"type":"string"}},"required":["script_key","declared_url","status","artifact","original_sources","original_module_edges","mappings","limitation"],"type":"object"}]},"type":"array"},"processed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_requested","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","requested","processed","dropped","dropped_script_keys","items"],"type":"object"},"webmcp_declarations":{"items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"schema_property_names":{"items":{"type":"string"},"type":"array"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["name","description","schema_property_names","trust","location"],"type":"object"},"type":"array"}},"required":["chunks","routes","endpoints","webmcp_declarations","source_maps"],"type":"object"},"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 bounded CDP observation window while the user operates the page. Allows approved same-origin reload and SPA navigation, records ordered navigation, redirect, lifecycle, and failure metadata, and stops before retaining an out-of-policy destination.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_timeline_events":2000,"observation_ms":10000,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_timeline_events":{"default":2000,"description":"Maximum permitted timeline events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"observation_ms":{"default":10000,"description":"Value for observation ms.","maximum":60000,"minimum":1,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"observe_web_session","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 page-registered WebMCP tools using the experimental CDP WebMCP domain. Metadata is bounded and page-declared-untrusted; REA never registers or invokes discovered tools.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_schema_bytes":262144,"max_schema_depth":20,"max_schema_nodes":5000,"max_tools":500,"observation_ms":100,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_schema_bytes":{"default":262144,"description":"Maximum permitted schema bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_schema_depth":{"default":20,"description":"Maximum permitted schema depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_schema_nodes":{"default":5000,"description":"Maximum permitted schema nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_tools":{"default":500,"description":"Maximum permitted tools for this operation.","maximum":5000,"minimum":1,"type":"integer"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"discover_webmcp_tools","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"name":{"type":"string"},"owner_origin":{"type":"string"},"registration_source":{"anyOf":[{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"url":{"type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}]},"tool_key":{"pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["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 either passive web captures or step-indexed browser scenarios. Scenario comparison aligns exact step IDs, records deterministic literal normalization, and exposes bounded artifact-level changes plus alignment failures. Missing or truncated evidence never proves equality.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"after":{"description":"Later passive web-page capture.","properties":{"inspection":{"description":"Value for inspection.","properties":{"accessibility":{"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"properties":{"body_shapes":{"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"scripts":{"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"properties":{"artifact":{"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["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 authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"properties":{"annotations":{"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"before":{"description":"Earlier passive web-page capture.","properties":{"inspection":{"description":"Value for inspection.","properties":{"accessibility":{"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"properties":{"body_shapes":{"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"scripts":{"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"properties":{"artifact":{"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["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 authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"properties":{"annotations":{"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"max_changes":{"default":2000,"description":"Maximum normalized change records to retain.","maximum":20000,"minimum":1,"type":"integer"}},"required":["before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after_scenario":{"additionalProperties":false,"description":"Later browser scenario capture.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","maxLength":1024,"minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","maxLength":65536,"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":"Bounded 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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","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.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":4096,"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"maxItems":129,"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"before_scenario":{"additionalProperties":false,"description":"Earlier browser scenario capture.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","maxLength":1024,"minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","maxLength":65536,"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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":"Bounded 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":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","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.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"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"}]},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"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.","maxLength":1024,"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"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"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.","prefixItems":[],"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","prefixItems":[],"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.","prefixItems":[],"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.","maxLength":4096,"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.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"maxItems":129,"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"max_changes":{"default":2000,"description":"Maximum normalized change records to retain.","maximum":20000,"minimum":1,"type":"integer"},"normalization":{"additionalProperties":false,"default":{"rules":[]},"description":"Exact-literal normalization policy.","properties":{"rules":{"default":[],"description":"Value for rules.","items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"}},"type":"object"}},"required":["before_scenario","after_scenario"],"type":"object"}],"examples":[{"after_scenario":{"browser":{"cleanup":"disconnected-external","mode":"connect","process_ownership":"external","product":"Chromium","version":"149"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"duration_ms":10,"events":{"dropped":0,"items":[],"retained":0},"limitations":[],"scenario":{"action_count":1,"allowed_origins":["https://app.example.test"],"secret_references":[],"start_origin":"https://app.example.test"},"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}]},"max_changes":2000,"normalization":{"rules":[{"artifacts":["dom","accessibility"],"match":"build-123","replacement":"[BUILD_ID]","rule_id":"volatile-build-id"}]}}],"type":"object"},"kind":"browser-provider","name":"compare_web_captures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"aligned_steps":{"maximum":129,"minimum":0,"type":"integer"},"before_only":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"failures":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate_before_step_id","duplicate_after_step_id","missing_before_step","missing_after_step","action_mismatch","capture_context_mismatch"],"type":"string"},"reason":{"maxLength":2048,"minLength":1,"type":"string"},"step_id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["code","step_id","reason"],"type":"object"},"maxItems":520,"type":"array"},"status":{"enum":["aligned","partial","failed"],"type":"string"}},"required":["status","aligned_steps","before_only","after_only","failures"],"type":"object"},"artifact_diffs":{"additionalProperties":false,"properties":{"omitted":{"maximum":1032,"minimum":0,"type":"integer"},"retained":{"maximum":1032,"minimum":0,"type":"integer"},"total":{"maximum":1032,"minimum":0,"type":"integer"}},"required":["total","retained","omitted"],"type":"object"},"comparison_kind":{"const":"browser_scenario","type":"string"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"normalization":{"additionalProperties":false,"properties":{"built_in_rules":{"items":{"enum":["ignore_step_elapsed_ms","ignore_event_sequence","ignore_event_step_index","compare_screenshot_content_digest","compare_normalized_text_content"],"type":"string"},"maxItems":5,"minItems":5,"type":"array"},"rules":{"items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["built_in_rules","rules","sha256"],"type":"object"},"overall_status":{"enum":["changed","unchanged","unknown"],"type":"string"},"steps":{"items":{"additionalProperties":false,"properties":{"after_action":{"maxLength":64,"minLength":1,"type":"string"},"after_step_index":{"maximum":128,"minimum":0,"type":"integer"},"artifact_diffs":{"items":{"additionalProperties":false,"properties":{"after_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"after_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"artifact":{"enum":["action_state","screenshot","dom","accessibility","url","history","storage","events"],"type":"string"},"before_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"before_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"reason":{"anyOf":[{"maxLength":2048,"minLength":1,"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unknown"],"type":"string"}},"required":["artifact","status","before_state","after_state","before_sha256","after_sha256","reason"],"type":"object"},"maxItems":8,"type":"array"},"before_action":{"maxLength":64,"minLength":1,"type":"string"},"before_step_index":{"maximum":128,"minimum":0,"type":"integer"},"omitted_artifact_diffs":{"maximum":8,"minimum":0,"type":"integer"},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"step_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["step_id","before_step_index","after_step_index","before_action","after_action","status","artifact_diffs","omitted_artifact_diffs"],"type":"object"},"maxItems":129,"type":"array"}},"required":["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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"}],"default":{"changes":[],"omitted_changes":0,"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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"}],"default":{"changes":[],"omitted_changes":0,"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"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"prefixItems":[],"type":"array"},"omitted_changes":{"const":0,"type":"number"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","omitted_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 approved page as a bounded, content-addressed PNG artifact. Screenshot capture requires separate explicit approval and never scrolls, navigates, or evaluates page JavaScript.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","maximum_image_bytes":4194304,"screenshot_approved":true,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"maximum_image_bytes":{"default":4194304,"description":"Bounded byte count for maximum image.","maximum":8388608,"minimum":1,"type":"integer"},"screenshot_approved":{"const":true,"description":"Explicit operator approval for screenshot.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved","screenshot_approved"],"type":"object"},"kind":"browser-provider","name":"capture_web_screenshot","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"captured_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"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 bounded local pixel metrics. Returns exact changed-pixel ratios and channel deltas without OCR or external services.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"after":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"before":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"channel_threshold":0,"maximum_pixels":16000000}],"properties":{"after":{"description":"The later or right-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"before":{"description":"The earlier or left-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"channel_threshold":{"default":0,"description":"Value for channel threshold.","maximum":255,"minimum":0,"type":"integer"},"maximum_pixels":{"default":16000000,"description":"Value for maximum pixels.","maximum":32000000,"minimum":1,"type":"integer"}},"required":["before","after"],"type":"object"},"kind":"browser-provider","name":"compare_web_screenshots","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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 one approved, bounded browser scenario through Playwright. Launch mode owns and terminates a temporary browser profile; connect mode attaches to one exact loopback CDP target and disconnects without terminating the external browser. Only the fixed action vocabulary is accepted. Navigation, storage, requests, redirects, secrets, redaction, captures, and limits must be declared before execution. Returns step-indexed Evidence with screenshots, DOM, accessibility, URL/history/storage state, runtime events, explicit missing/truncated sections, and equality eligibility.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"action":"wait_for","locator":{"kind":"test_id","value":"application-ready"},"state":"visible","step_id":"ready"}],"allowed_origins":["https://app.example.test"],"approved":true,"browser":{"cleanup":"close-and-delete-profile","executable_path":"/opt/chromium/chrome","headless":true,"mode":"launch","user_data":"temporary-owned"},"capture":{"after_each_step":["screenshot","url","accessibility"],"at_end":["dom","history","storage"],"events":["console","page-errors","network","websockets"]},"environment":{"color_scheme":"light","locale":"en-US","reduced_motion":"reduce","service_workers":"block","timezone":"UTC","viewport":{"device_scale_factor":1,"height":720,"width":1280}},"limits":{"action_timeout_ms":5000,"max_accessibility_nodes":10000,"max_dom_nodes":10000,"max_duration_ms":60000,"max_events":2000,"max_frames":100,"max_popups":10,"max_screenshot_bytes":4194304,"max_screenshots":16,"max_storage_entries":256,"max_total_metadata_bytes":4194304,"max_websockets":100,"max_workers":20,"navigation_timeout_ms":10000},"redaction":{"header_names":["authorization","cookie","proxy-authorization","set-cookie"],"query_parameter_names":[],"secret_values":"replace-with-secret-reference"},"request_replay":{"mode":"disabled"},"secrets":[],"start_url":{"query":[],"url":"https://app.example.test/"},"storage":{"cookies":[],"local_storage":[],"session_storage":[]}}],"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"action":{"const":"goto","description":"Value for action.","type":"string"},"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"wait_until":{"description":"Value for wait until.","enum":["commit","domcontentloaded","load"],"type":"string"}},"required":["step_id","action","destination","wait_until"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"click","description":"Value for action.","type":"string"},"button":{"default":"left","description":"Value for button.","enum":["left","middle","right"],"type":"string"},"click_count":{"default":1,"description":"Value for click count.","maximum":3,"minimum":1,"type":"integer"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"fill","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"press","description":"Value for action.","type":"string"},"key":{"description":"Value for key.","maxLength":64,"minLength":1,"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","key"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"select_option","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","enum":["check","uncheck"],"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"state":{"description":"Value for state.","enum":["attached","detached","visible","hidden"],"type":"string"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","state"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for_timeout","description":"Value for action.","type":"string"},"duration_ms":{"description":"Value for duration ms.","maximum":60000,"minimum":1,"type":"integer"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["step_id","action","duration_ms"],"type":"object"}]},"maxItems":128,"minItems":1,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"browser":{"description":"Value for browser.","oneOf":[{"additionalProperties":false,"properties":{"cleanup":{"const":"close-and-delete-profile","description":"Value for cleanup.","type":"string"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":4096,"minLength":1,"type":"string"},"headless":{"const":true,"description":"Value for headless.","type":"boolean"},"mode":{"const":"launch","description":"Operation mode that selects the requested behavior.","type":"string"},"user_data":{"const":"temporary-owned","description":"Value for user data.","type":"string"}},"required":["mode","executable_path","headless","user_data","cleanup"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"cleanup":{"const":"disconnect-only","description":"Value for cleanup.","type":"string"},"mode":{"const":"connect","description":"Operation mode that selects the requested behavior.","type":"string"},"ownership":{"const":"external","description":"Value for ownership.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","cdp_endpoint","target_id","ownership","cleanup"],"type":"object"}]},"capture":{"additionalProperties":false,"description":"Value for capture.","properties":{"after_each_step":{"description":"Value for after each step.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"at_end":{"description":"Value for at end.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"events":{"description":"Value for events.","items":{"enum":["console","page-errors","network","websockets","frames","workers","popups","downloads"],"type":"string"},"type":"array"}},"required":["after_each_step","at_end","events"],"type":"object"},"environment":{"additionalProperties":false,"description":"Value for environment.","properties":{"color_scheme":{"description":"Value for color scheme.","enum":["light","dark","no-preference"],"type":"string"},"locale":{"description":"Value for locale.","maxLength":64,"minLength":2,"pattern":"^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$","type":"string"},"reduced_motion":{"description":"Value for reduced motion.","enum":["reduce","no-preference"],"type":"string"},"service_workers":{"const":"block","description":"Value for service workers.","type":"string"},"timezone":{"description":"Value for timezone.","maxLength":128,"minLength":1,"pattern":"^[A-Za-z0-9_+-]+(?:\\\\/[A-Za-z0-9_+-]+)*$","type":"string"},"viewport":{"additionalProperties":false,"description":"Value for viewport.","properties":{"device_scale_factor":{"default":1,"description":"Value for device scale factor.","maximum":4,"minimum":0.5,"type":"number"},"height":{"description":"Value for height.","maximum":4320,"minimum":240,"type":"integer"},"width":{"description":"Value for width.","maximum":7680,"minimum":320,"type":"integer"}},"required":["width","height"],"type":"object"}},"required":["viewport","locale","timezone","color_scheme","reduced_motion","service_workers"],"type":"object"},"limits":{"additionalProperties":false,"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"description":"Value for action timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"max_accessibility_nodes":{"description":"Maximum permitted accessibility nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_dom_nodes":{"description":"Maximum permitted dom nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_duration_ms":{"description":"Maximum permitted duration ms for this operation.","maximum":300000,"minimum":100,"type":"integer"},"max_events":{"description":"Maximum permitted events for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_frames":{"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_popups":{"description":"Maximum permitted popups for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_screenshot_bytes":{"description":"Maximum permitted screenshot bytes for this operation.","maximum":8388608,"minimum":1,"type":"integer"},"max_screenshots":{"description":"Maximum permitted screenshots for this operation.","maximum":256,"minimum":0,"type":"integer"},"max_storage_entries":{"description":"Maximum permitted storage entries for this operation.","maximum":512,"minimum":0,"type":"integer"},"max_total_metadata_bytes":{"description":"Maximum permitted total metadata bytes for this operation.","maximum":67108864,"minimum":1024,"type":"integer"},"max_websockets":{"description":"Maximum permitted websockets for this operation.","maximum":10000,"minimum":0,"type":"integer"},"max_workers":{"description":"Maximum permitted workers for this operation.","maximum":1000,"minimum":0,"type":"integer"},"navigation_timeout_ms":{"description":"Value for navigation timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["max_duration_ms","action_timeout_ms","navigation_timeout_ms","max_events","max_frames","max_workers","max_popups","max_websockets","max_dom_nodes","max_accessibility_nodes","max_screenshots","max_screenshot_bytes","max_storage_entries","max_total_metadata_bytes"],"type":"object"},"redaction":{"additionalProperties":false,"description":"Value for redaction.","properties":{"header_names":{"description":"Value for header names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"secret_values":{"const":"replace-with-secret-reference","description":"Value for secret values.","type":"string"}},"required":["secret_values"],"type":"object"},"request_replay":{"description":"Value for request replay.","oneOf":[{"additionalProperties":false,"properties":{"mode":{"const":"disabled","description":"Operation mode that selects the requested behavior.","type":"string"}},"required":["mode"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"const":"exact","description":"Operation mode that selects the requested behavior.","type":"string"},"routes":{"description":"Value for routes.","items":{"additionalProperties":false,"properties":{"method":{"description":"Value for method.","enum":["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"],"type":"string"},"request":{"additionalProperties":false,"description":"Value for request.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"response":{"description":"Value for response.","oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]},"headers":{"description":"Value for headers.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+\\\\-.^_`|~0-9A-Za-z]+$","type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["kind","status"],"type":"object"},{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"kind":{"const":"redirect","description":"Value for kind.","type":"string"},"status":{"anyOf":[{"const":301,"type":"number"},{"const":302,"type":"number"},{"const":303,"type":"number"},{"const":307,"type":"number"},{"const":308,"type":"number"}],"description":"Current lifecycle or verification status."}},"required":["kind","status","destination"],"type":"object"}]},"route_id":{"description":"Value for route id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["route_id","method","request","response"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"unmatched":{"description":"Value for unmatched.","enum":["abort","passthrough-approved-origins"],"type":"string"}},"required":["mode","unmatched","routes"],"type":"object"}]},"secrets":{"default":[],"description":"Value for secrets.","items":{"additionalProperties":false,"properties":{"environment_variable":{"description":"Value for environment variable.","pattern":"^[A-Z_][A-Z0-9_]{0,127}$","type":"string"},"purpose":{"description":"Value for purpose.","enum":["input","storage","request-replay"],"type":"string"},"redaction":{"const":"replace-with-secret-reference","description":"Value for redaction.","type":"string"},"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["secret_id","environment_variable","purpose","redaction"],"type":"object"},"maxItems":64,"type":"array"},"start_url":{"additionalProperties":false,"description":"Value for start url.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"storage":{"additionalProperties":false,"description":"Value for storage.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value","destination","http_only","secure","same_site"],"type":"object"},"maxItems":128,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"}},"type":"object"}},"required":["browser","start_url","allowed_origins","environment","actions","storage","request_replay","redaction","capture","limits","approved"],"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","zip","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":{"maxLength":1024,"minLength":1,"type":"string"},"version":{"maxLength":256,"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":{"prefixItems":[],"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"prefixItems":[],"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":{"prefixItems":[],"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":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"maxLength":65536,"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","type":"string"},"message":{"maxLength":65536,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}]},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"type":"null"},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request","type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"type":"null"},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"response","type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"maximum":599,"minimum":100,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"maxLength":1024,"minLength":1,"type":"string"},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"const":"request-failed","type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","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":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"maxLength":65536,"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":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_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":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"maxLength":1024,"type":"string"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"properties":{"action_count":{"maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"steps":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"properties":{"accessibility":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"current_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"cookies":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"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":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"prefixItems":[],"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"prefixItems":[],"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":{"prefixItems":[],"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":{"maxLength":64,"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":{"maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"properties":{"accessibility":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"current_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"cookies":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"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":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"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":{"maxLength":1024,"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"prefixItems":[],"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"prefixItems":[],"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":{"prefixItems":[],"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":{"maxLength":4096,"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":{"maxLength":64,"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"}]},"maxItems":129,"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 an approved user-owned loopback CDP endpoint. Every path is canonicalized and must remain contained by an approved filesystem root, including after symlink resolution.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223"}],"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved"],"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","zip","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"},"outside_root":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_root","unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"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 approved Electron file page through CDP. Returns root-confined frames, DOM structure, resource paths, and scripts without evaluating renderer JavaScript or invoking Electron APIs; script contents require separate approval.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"limits":{"default":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":500,"description":"Maximum permitted scripts for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":false,"default":false,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved","target_id"],"type":"object"},{"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"include_script_sources":{"const":true,"description":"Whether to include script sources in the result.","type":"boolean"},"limits":{"default":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":500,"description":"Maximum permitted scripts for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved","target_id","include_script_sources","source_capture_approved"],"type":"object"}],"examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":false,"limits":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"observation_ms":100,"source_capture_approved":false,"target_id":"TARGET_ID_FROM_LIST_ELECTRON_TARGETS"}],"type":"object"},"kind":"electron-provider","name":"inspect_electron_page","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]}},"required":["script_key","frame_id","file_path","cdp_hash","length","is_module","language","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["target_id","type","title","file_path","attached"],"type":"object"},"workers":{"default":[],"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"opener_target_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"target_id":{"maxLength":256,"minLength":1,"type":"string"},"type":{"maxLength":100,"minLength":1,"type":"string"}},"required":["target_id","type","file_path","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["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"},"limits":{"additionalProperties":false,"default":{"max_artifact_entry_bytes":134217728,"max_ast_nodes":2000000,"max_compression_ratio":1000,"max_depth":64,"max_entries":8000,"max_findings":8000,"max_modules":20000,"max_parse_milliseconds":30000,"max_path_bytes":4096,"max_source_map_sources":5000,"max_text_file_bytes":8388608,"max_text_files":5000,"max_total_artifact_bytes":536870912,"max_total_text_bytes":134217728},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_artifact_entry_bytes":{"default":134217728,"description":"Maximum permitted artifact entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_ast_nodes":{"default":2000000,"description":"Maximum permitted ast nodes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","minimum":1,"type":"number"},"max_depth":{"default":64,"description":"Maximum permitted depth for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_entries":{"default":8000,"description":"Maximum permitted entries for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_findings":{"default":8000,"description":"Maximum permitted findings for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_modules":{"default":20000,"description":"Maximum permitted modules for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_parse_milliseconds":{"default":30000,"description":"Maximum permitted parse milliseconds for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_source_map_sources":{"default":5000,"description":"Maximum permitted source map sources for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_text_file_bytes":{"default":8388608,"description":"Maximum permitted text file bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_text_files":{"default":5000,"description":"Maximum permitted text files for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_total_artifact_bytes":{"default":536870912,"description":"Maximum permitted total artifact bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_total_text_bytes":{"default":134217728,"description":"Maximum permitted total text bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"}},"type":"object"}},"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","zip","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"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":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_graph":{"additionalProperties":false,"properties":{"application_graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"families":{"items":{"additionalProperties":false,"properties":{"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"retained_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial","unknown","unsupported"],"type":"string"},"unknown_ids":{"items":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["family","status","retained_relations","omitted_relations","unknown_ids"],"type":"object"},"maxItems":12,"minItems":12,"type":"array"},"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_nodes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_nodes","omitted_relations","limits","families"],"type":"object"},"fingerprints":{"items":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea.javascript-semantic-function/v1","type":"string"},"components":{"additionalProperties":false,"properties":{"control_flow_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"effects":{"items":{"enum":["async","child-process","event","network","promise","resource","timer"],"type":"string"},"maxItems":7,"type":"array"},"literal_set_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"normalized_ast_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameter_arity":{"maximum":10000,"minimum":0,"type":"integer"},"relation_shape_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["parameter_arity","normalized_ast_sha256","control_flow_sha256","relation_shape_sha256","literal_set_sha256","effects"],"type":"object"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"fingerprint_id":{"pattern":"^jsrg_fingerprint_[a-f0-9]{64}$","type":"string"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"function_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["function_node_id","algorithm","status","components","limitations","evidence","fingerprint_id","fingerprint_sha256"],"type":"object"},"maxItems":20000,"type":"array"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"root_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptSemanticRelationGraph","type":"string"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["schema","root_artifact_sha256","application_graph_id","root_node_ids","nodes","relations","fingerprints","unknowns","coverage","limitations","graph_id"],"type":"object"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","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_91082198e814983dc3c1566f5c83b9314474c533300acf03f6c94168555a582f","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","uri":"rea://web-content/sha256/c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"included":true}}],"total":1},"target":{"attached":false,"file_path":"/Applications/Example.app/Contents/Resources/app/index.html","target_id":"example-target","title":"Example","type":"page"},"workers":[]},"operation":"inspect_electron_page","parameters":{"allowed_file_roots":["/Applications/Example.app/Contents/Resources/app"],"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":true,"source_capture_approved":true,"target_id":"example-target"},"predicate_type":"rea.electron-page-inspection/v1","provider":{"id":"rea-cdp-electron","name":"REA Electron file-page CDP observation provider","version":"1"},"raw_result":null,"subject":null}],"static_layers":[{"analysis":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_533f92a7d5fd91c8f7a1aa1cf2bdd2195a02f1577d6b901a10734c691458ebec","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,"limit_omitted_text_files":0,"modules":0,"nested_asar_containers":0,"omitted_text_files":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"text_files_selected":1,"truncated_scopes":0,"visited_ast_nodes":1},"summary":{"browser_windows":0,"context_bridge_apis":0,"explicit_web_preferences":0,"exposed_api_members":0,"ipc":{"ambiguous_renderer_transmissions":0,"dynamic_channel_operations":0,"literal_channels":0,"main_handlers":0,"operations":0,"paired_renderer_transmissions":0,"renderer_listeners":0,"renderer_transmissions":0,"unpaired_literal_renderer_transmissions":0},"native_addon_bindings":0,"preload_entrypoints":0,"resolved_native_addon_bindings":0,"resolved_utility_entrypoints":0,"sender_validation_observations":0,"utility_processes":0}},"operation":"analyze_javascript_application","parameters":{},"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"}},"role":"application"}]}],"properties":{"limits":{"additionalProperties":false,"default":{"max_reconciliation_items":20000,"max_runtime_entities":10000,"max_static_load_states":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_reconciliation_items":{"default":20000,"description":"Maximum permitted reconciliation items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_runtime_entities":{"default":10000,"description":"Maximum permitted runtime entities for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_static_load_states":{"default":20000,"description":"Maximum permitted static load states for this operation.","maximum":50000,"minimum":1,"type":"integer"}},"type":"object"},"runtime_observations":{"description":"Value for runtime observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"static_layers":{"description":"Value for static layers.","items":{"additionalProperties":false,"properties":{"analysis":{"additionalProperties":false,"description":"Value for analysis.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"role":{"description":"Value for role.","enum":["application","cache","assets"],"type":"string"},"runtime_mappings":{"default":[],"description":"Value for runtime mappings.","items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"file-root","description":"Value for kind.","type":"string"},"root":{"description":"Value for root.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","description":"Value for kind.","type":"string"},"prefix":{"description":"Value for prefix.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["role","analysis"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"}},"required":["static_layers","runtime_observations"],"type":"object"},"kind":"electron-provider","name":"reconcile_javascript_runtime","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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"},"maxItems":40,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"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":800000,"minimum":0,"type":"integer"},"candidate_static_nodes":{"items":{"additionalProperties":false,"properties":{"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["static_layer_id","static_node_id"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"entity_kind":{"enum":["target","frame","script","worker"],"type":"string"},"reason":{"enum":["content-and-location-match","unique-content-match","unique-location-match","ambiguous-static-candidates","captured-content-disagrees-with-static-location","no-static-content-match","no-authorized-location-mapping","runtime-frame-unattributed","static-or-runtime-coverage-incomplete","reconciliation-limit-reached"],"type":"string"},"reconciliation_id":{"pattern":"^jrr_item_[a-f0-9]{64}$","type":"string"},"runtime_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"runtime_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"static_layer_id":{"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":800000,"minimum":0,"type":"integer"},"candidate_static_nodes":{"items":{"additionalProperties":false,"properties":{"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["static_layer_id","static_node_id"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"entity_kind":{"enum":["target","frame","script","worker"],"type":"string"},"reason":{"enum":["content-and-location-match","unique-content-match","unique-location-match","ambiguous-static-candidates","captured-content-disagrees-with-static-location","no-static-content-match","no-authorized-location-mapping","runtime-frame-unattributed","static-or-runtime-coverage-incomplete","reconciliation-limit-reached"],"type":"string"},"reconciliation_id":{"pattern":"^jrr_item_[a-f0-9]{64}$","type":"string"},"runtime_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"runtime_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"static_layer_id":{"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"}]},"maxItems":50000,"type":"array"},"runtime_captures":{"items":{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["browser","electron","v8-inspector","electron-active"],"type":"string"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts_complete_within_scope":{"type":"boolean"},"target_key":{"maxLength":4096,"minLength":1,"type":"string"},"target_location":{"maxLength":4096,"minLength":1,"type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["evidence_id","capture_sha256","kind","target_node_id","target_key","target_location","frames","scripts","workers","scripts_complete_within_scope"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"source_map_authority":{"additionalProperties":false,"properties":{"limitation":{"maxLength":4096,"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":{"maxLength":16384,"minLength":1,"type":"string"},"layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"role":{"enum":["application","cache","assets"],"type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_mappings":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"file-root","type":"string"},"root":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root","artifact_prefix"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","type":"string"},"prefix":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix","artifact_prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["layer_id","role","evidence_id","graph_id","root_artifact_sha256","input_path","format","runtime_mappings"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"},"static_load_states":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["javascript-asset","javascript-chunk","javascript-module"],"type":"string"},"reason":{"enum":["runtime-script-correspondence","containing-asset-was-loaded","not-observed-in-bounded-capture","layer-outside-runtime-scope","static-or-runtime-coverage-incomplete"],"type":"string"},"runtime_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"type":"array"},"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["loaded","resident-in-loaded-asset","not-observed-in-capture","unknown"],"type":"string"}},"required":["static_layer_id","static_node_id","kind","status","runtime_node_ids","reason"],"type":"object"},"maxItems":50000,"type":"array"},"summary":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"matched":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_targets":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_loaded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_not_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_resident":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["runtime_targets","runtime_frames","runtime_scripts","runtime_workers","matched","ambiguous","unmatched","unknown","static_loaded","static_resident","static_not_observed","static_unknown"],"type":"object"}},"required":["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 an explicitly approved, provider-owned Electron run when passive CDP or Inspector observation cannot exercise application behavior. REA owns startup and teardown, accepts bounded click/wait actions plus window-targeted renderer reload/crash and synthetic open-url/second-instance delivery, and returns correlated window/WebContents/process/preload/session/navigation/shell/IPC evidence without retaining payload values. Results identify observed and unavailable event families, coverage status, action targets, and truncation. External shell, navigation, permission, download, popup, updater, and OS-integration effects are blocked and recorded. Use passive Electron tools for observation-only work.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"kind":"click","selector":"#run","step_id":"exercise-ipc"}],"application_path":"/Applications/Example.app/Contents/Resources/main.js","application_root":"/Applications/Example.app/Contents/Resources","approved":true,"args":[],"executable_path":"/Applications/Electron.app/Contents/MacOS/Electron","limits":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_windows":32}}],"properties":{"actions":{"default":[],"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"click","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":512,"minLength":1,"type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","selector"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"wait","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","duration_ms"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-reload","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-crash","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"delivery":{"description":"Value for delivery.","enum":["open-url","second-instance"],"type":"string"},"kind":{"const":"deep-link","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"url":{"description":"Value for url.","maxLength":4096,"minLength":1,"type":"string"}},"required":["step_id","kind","delivery","url"],"type":"object"}]},"maxItems":100,"type":"array"},"application_path":{"description":"Local filesystem path for application.","maxLength":16384,"minLength":1,"type":"string"},"application_root":{"description":"Approved canonical filesystem application root.","maxLength":16384,"minLength":1,"type":"string"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"args":{"default":[],"description":"Value for args.","items":{"maxLength":4096,"type":"string"},"maxItems":32,"type":"array"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":16384,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_runtime_events":5000,"max_windows":32},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"default":5000,"description":"Value for action timeout ms.","maximum":30000,"minimum":1,"type":"integer"},"max_actions":{"default":20,"description":"Maximum permitted actions for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_duration_ms":{"default":60000,"description":"Maximum permitted duration ms for this operation.","maximum":120000,"minimum":1,"type":"integer"},"max_ipc_events":{"default":2000,"description":"Maximum permitted ipc events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_processes":{"default":32,"description":"Maximum permitted processes for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_runtime_events":{"default":5000,"description":"Maximum permitted runtime events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_windows":{"default":32,"description":"Maximum permitted windows for this operation.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"}},"required":["executable_path","application_path","application_root","approved"],"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","zip","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":{"maxLength":128,"minLength":1,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":99,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","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":{"maxLength":128,"minLength":1,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":99,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","elapsed_ms","status","error"],"type":"object"}]},"maxItems":100,"type":"array"},"application":{"additionalProperties":false,"properties":{"application_path":{"maxLength":16384,"minLength":1,"type":"string"},"cleanup":{"const":"terminated-owned-process","type":"string"},"electron_version":{"maxLength":256,"minLength":1,"type":"string"},"executable_path":{"maxLength":16384,"minLength":1,"type":"string"},"process_ownership":{"const":"provider-owned","type":"string"}},"required":["executable_path","application_path","electron_version","process_ownership","cleanup"],"type":"object"},"coverage":{"additionalProperties":false,"default":{"observed_event_families":[],"observed_roles":[],"pre_capture_activity":"unavailable","status":"partial_attach","unavailable_event_families":[]},"properties":{"observed_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"},"observed_roles":{"items":{"maxLength":128,"type":"string"},"maxItems":16,"type":"array"},"pre_capture_activity":{"const":"unavailable","type":"string"},"status":{"enum":["complete","partial_attach","capture_truncated","hook_conflict","target_exited","cleanup_failed"],"type":"string"},"unavailable_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"}},"required":["status","observed_event_families","unavailable_event_families","observed_roles","pre_capture_activity"],"type":"object"},"ipc":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"default":false,"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"capture_method":{"default":"api-wrapper","enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"default":false,"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message"],"type":"string"},"phase":{"anyOf":[{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},{"type":"null"}]},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"default":"electron-active-hook","maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","channel","channel_truncated","frame","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":10000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"processes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"service_name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"type":{"maxLength":128,"minLength":1,"type":"string"}},"required":["pid","type","name","service_name"],"type":"object"},"maxItems":100,"type":"array"},"truncated":{"type":"boolean"}},"required":["items","truncated"],"type":"object"},"timeline":{"additionalProperties":false,"default":{"events":[],"observed":0,"retained":0,"truncated":false},"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"capture_method":{"enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message","app-lifecycle","window-lifecycle","web-contents-lifecycle","navigation","shell-attempt","process-lifecycle","permission","popup-attempt","download","protocol","preload","native-addon","updater","error"],"type":"string"},"phase":{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","event","phase","channel","channel_truncated","direction","sender","receiver","frame","target","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":20000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"windows":{"items":{"additionalProperties":false,"properties":{"destroyed":{"type":"boolean"},"title":{"maxLength":16384,"type":"string"},"url":{"maxLength":65536,"type":"string"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"web_contents_id":{"maxLength":256,"type":"string"},"window_id":{"maxLength":256,"type":"string"}},"required":["window_id","web_contents_id","url","title","visible","destroyed"],"type":"object"},"maxItems":100,"type":"array"},"windows_truncated":{"type":"boolean"}},"required":["application","actions","windows","windows_truncated","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 attachable Node/Electron V8 Inspector target from one approved literal-loopback endpoint. Only targets inside exact canonical file roots or exact HTTP(S) origins are retained; excluded target locations never enter Evidence.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229"}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"}},"required":["inspector_endpoint","approved"],"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","zip","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":{"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unconnectable":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","unconnectable"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"targets":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location"],"type":"object"},"type":"array"}},"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 exact approved Node/Electron V8 Inspector target and capture bounded Debugger.scriptParsed plus Runtime execution-context events. REA sends only Runtime.enable and Debugger.enable: it never evaluates, pauses, resumes, reads source, or instruments the target. require/import edges, EventEmitter activity, and Electron IPC remain explicit unknowns; reconcile the returned Evidence with static Application Graph Evidence using reconcile_javascript_runtime.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229","limits":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"observation_ms":100,"runtime_kind":"node","target_id":"TARGET_ID_FROM_LIST_JAVASCRIPT_RUNTIME_TARGETS"}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_events":{"default":10000,"description":"Maximum permitted events for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_execution_contexts":{"default":1000,"description":"Maximum permitted execution contexts for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_location_bytes":{"default":16384,"description":"Maximum permitted location bytes for this operation.","maximum":65536,"minimum":64,"type":"integer"},"max_scripts":{"default":2000,"description":"Maximum permitted scripts for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_metadata_bytes":{"default":4194304,"description":"Maximum permitted total metadata bytes for this operation.","maximum":33554432,"minimum":1024,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"runtime_kind":{"description":"Value for runtime kind.","enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["inspector_endpoint","approved","target_id","runtime_kind"],"type":"object"},"kind":"runtime-provider","name":"observe_javascript_runtime","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"}},"required":["observation_ms","events_observed","events_retained","events_dropped","metadata_bytes_retained","truncated","truncation_reasons"],"type":"object"},"directly_observed":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"execution_contexts":{"items":{"additionalProperties":false,"properties":{"context_key":{"maxLength":64,"minLength":1,"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}]},"state":{"enum":["created","destroyed","cleared"],"type":"string"}},"required":["context_key","state","name","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"scripts":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"invalid_protocol_value":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","invalid_protocol_value"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}]},"execution_context_key":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"is_module":{"type":"boolean"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"script_key":{"pattern":"^v8_script_[a-f0-9]{64}$","type":"string"},"status":{"const":"observed-loaded","type":"string"}},"required":["script_key","location","execution_context_key","cdp_hash","length","is_module","status"],"type":"object"},"type":"array"},"observed_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","observed_total","excluded"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"runtime_kind":{"enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"runtime_kind_authority":{"const":"caller-declared-unverified","type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location","runtime_kind","runtime_kind_authority"],"type":"object"},"unavailable_without_instrumentation":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["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 full Evidence or an Evidence ID returned earlier in this session. Original static, native, passive-runtime, inferred, and unknown authorities remain distinct; native addon handoffs never open a provider or execute the application.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["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_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"native_observations":{"default":[],"description":"Value for native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["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"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"direction":{"default":"both","description":"Direction in which to traverse or compare relationships.","enum":["outgoing","incoming","both"],"type":"string"},"native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"native_observations":{"default":[],"description":"Value for native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["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_evidence_id"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","direction":"both","seed":{"case_sensitive":false,"kind":"module","match":"exact","value":"renderer.js"}}],"type":"object"},"kind":"application","name":"trace_application_feature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"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 the inline Evidence returned by analyze_javascript_application. Dynamic or unsupported semantics remain explicit unknowns; static reachability never claims runtime execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"query":{"additionalProperties":false,"description":"Non-empty feature or text query to investigate.","properties":{"allowed_relations":{"description":"Value for allowed relations.","items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":44,"minItems":1,"type":"array"},"cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"Value for cursor."},"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"expected":{"anyOf":[{"additionalProperties":false,"properties":{"classes":{"description":"Value for classes.","items":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"maxItems":24,"minItems":1,"type":"array"},"role":{"description":"Value for role.","enum":["source","sink"],"type":"string"}},"required":["role","classes"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for expected."},"include_ambiguous_dynamic_edges":{"default":false,"description":"Whether to include ambiguous dynamic edges in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_functions":500,"max_modules":500,"max_nodes":2000,"max_seed_matches":25,"max_unknowns":1000,"page_size":200},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"description":"Maximum permitted functions for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"description":"Maximum permitted modules for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"description":"Maximum permitted unknowns for this operation.","maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"description":"Value for page size.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"seed":{"description":"Value for seed.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","description":"Value for kind.","type":"string"},"value":{"$ref":"#/$defs/__schema0","description":"Value for value."}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"description":"Exact SHA-256 digest of fingerprint.","pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]},"source_map_authority":{"additionalProperties":false,"default":{"authority":"none"},"description":"Value for source map authority.","properties":{"authority":{"const":"none","description":"Value for authority.","type":"string"}},"required":["authority"],"type":"object"}},"required":["seed","direction"],"type":"object"}},"required":["application","query"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"query":{"additionalProperties":false,"description":"Non-empty feature or text query to investigate.","properties":{"allowed_relations":{"description":"Value for allowed relations.","items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":44,"minItems":1,"type":"array"},"cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"Value for cursor."},"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"expected":{"anyOf":[{"additionalProperties":false,"properties":{"classes":{"description":"Value for classes.","items":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"maxItems":24,"minItems":1,"type":"array"},"role":{"description":"Value for role.","enum":["source","sink"],"type":"string"}},"required":["role","classes"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for expected."},"include_ambiguous_dynamic_edges":{"default":false,"description":"Whether to include ambiguous dynamic edges in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_functions":500,"max_modules":500,"max_nodes":2000,"max_seed_matches":25,"max_unknowns":1000,"page_size":200},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"description":"Maximum permitted functions for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"description":"Maximum permitted modules for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"description":"Maximum permitted unknowns for this operation.","maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"description":"Value for page size.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"seed":{"description":"Value for seed.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","description":"Value for kind.","type":"string"},"value":{"$ref":"#/$defs/__schema0","description":"Value for value."}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"description":"Exact SHA-256 digest of fingerprint.","pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]},"source_map_authority":{"additionalProperties":false,"default":{"authority":"none"},"description":"Value for source map authority.","properties":{"authority":{"const":"none","description":"Value for authority.","type":"string"}},"required":["authority"],"type":"object"}},"required":["seed","direction"],"type":"object"}},"required":["application_evidence_id","query"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","query":{"direction":"backward-provenance","seed":{"kind":"semantic-node","node_id":"jsrg_node_0000000000000000000000000000000000000000000000000000000000000000"},"source_map_authority":{"authority":"none"}}}],"type":"object"},"kind":"application","name":"trace_javascript_semantics","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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":{"accepted_limit_ranges":{"additionalProperties":false,"properties":{"max_depth":{"additionalProperties":false,"properties":{"maximum":{"const":64,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_edges":{"additionalProperties":false,"properties":{"maximum":{"const":100000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_functions":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_modules":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_nodes":{"additionalProperties":false,"properties":{"maximum":{"const":50000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_seed_matches":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_unknowns":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"page_size":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"applied_limits":{"additionalProperties":false,"properties":{"max_depth":{"default":12,"maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"maximum":1000,"minimum":1,"type":"integer"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"frontier":{"items":{"additionalProperties":false,"properties":{"depth":{"maximum":65,"minimum":0,"type":"integer"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"reason":{"enum":["max-depth","max-edges","max-functions","max-modules","max-nodes","max-seed-matches"],"type":"string"}},"required":["node_id","depth","reason"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"enum":["complete","partial","truncated","unavailable"],"type":"string"}},"required":["status","frontier"],"type":"object"},"direction":{"enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"expected_match_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":3000,"type":"array"},"page":{"additionalProperties":false,"properties":{"next_cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"size":{"maximum":1000,"minimum":0,"type":"integer"}},"required":["offset","size","next_cursor"],"type":"object"},"query_id":{"pattern":"^jsrq_[a-f0-9]{64}$","type":"string"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":1000,"type":"array"},"seed":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","type":"string"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","type":"string"},"value":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","type":"string"}},"required":["kind","field"],"type":"object"}]},"seed_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"source_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"source_graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"status":{"enum":["found","no-match","ambiguous","partial","truncated","unsupported"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"relevant_unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_unknowns":{"maximum":10000,"minimum":0,"type":"integer"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_functions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_seed_matches","retained_seed_matches","traversed_nodes","traversed_relations","traversed_functions","traversed_modules","relevant_unknowns","retained_unknowns"],"type":"object"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["query_id","source_graph_id","seed","direction","status","seed_node_ids","nodes","relations","unknowns","expected_match_node_ids","summary","coverage","page","applied_limits","accepted_limit_ranges","limitations","source_evidence_id","evidence_links"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Javascript Semantics"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two authenticated JavaScript Application Graph versions supplied as full Evidence or Evidence IDs returned earlier in this session. Uses unique-only exact digest, module source digest, source-map identity, structural fingerprint, and non-module semantic-key tiers. Reports added, removed, changed, ambiguous, and unknown entities plus a bounded changed_from graph without fuzzy or module-ordinal pairing.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left","right"],"type":"object"},{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left","right_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"type":"object"},"kind":"application","name":"compare_application_versions","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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":{"anyOf":[{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"const":0,"type":"number"},"omitted_comparison_items":{"const":0,"type":"number"},"omitted_graph_edges":{"const":0,"type":"number"},"omitted_graph_nodes":{"const":0,"type":"number"},"omitted_graph_observations":{"const":0,"type":"number"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"const":"complete-within-inputs","type":"string"}},"required":["left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations","status"],"type":"object"},{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"const":0,"type":"number"},"omitted_comparison_items":{"const":0,"type":"number"},"omitted_graph_edges":{"const":0,"type":"number"},"omitted_graph_nodes":{"const":0,"type":"number"},"omitted_graph_observations":{"const":0,"type":"number"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"const":"partial","type":"string"}},"required":["left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations","status"],"type":"object"},{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_comparison_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"const":"truncated","type":"string"}},"required":["left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations","status"],"type":"object"}]},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":4096,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"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":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"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"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"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":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"prefixItems":[],"type":"array"},"candidate_right_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"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"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"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"},"maxItems":1000,"prefixItems":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}],"type":"array"},"candidate_right_node_ids":{"prefixItems":[],"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"}]},"maxItems":50000,"type":"array"},"left":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"matching":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_content_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_module_source_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_node_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"semantic_key":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_map_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural_fingerprint":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["exact_node_identity","exact_content_digest","exact_module_source_digest","source_map_identity","structural_fingerprint","semantic_key","ambiguous","unmatched"],"type":"object"},"right":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"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/v1 with authenticated JavaScript Application Graph Evidence supplied directly or by session Evidence ID. Uses explicit exact-digest, source-map path, current-path, suffix, and basename signals with stable weights. Classifies unchanged, modified, removed, split, merged, duplicated, and unknown; incomplete coverage and ambiguous weak signals never become absence or forced matches.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"limits":{"additionalProperties":false,"default":{"max_application_nodes":20000,"max_candidate_evaluations":1000000,"max_candidate_nodes":100,"max_source_files":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_application_nodes":{"default":20000,"description":"Maximum permitted application nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_candidate_evaluations":{"default":1000000,"description":"Maximum permitted candidate evaluations for this operation.","maximum":10000000,"minimum":1,"type":"integer"},"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_source_files":{"default":10000,"description":"Maximum permitted source files for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"reference":{"additionalProperties":false,"description":"Value for reference.","properties":{"authority":{"const":"historical-reference","description":"Value for authority.","type":"string"},"entries":{"description":"Value for entries.","items":{"anyOf":[{"anyOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"const":"hashed","description":"Value for content state.","type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["redacted-secret","excluded","unreadable","too-large","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"tree_state":{"description":"Value for tree state.","enum":["enumerated","partial","excluded","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","tree_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"target":{"description":"Value for target.","maxLength":4096,"minLength":1,"type":"string"},"target_state":{"description":"Value for target state.","enum":["internal","external","missing","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","target","target_state"],"type":"object"}]},"maxItems":100000,"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","enum":["configured-secret","symlink-escape","size-limit","inventory-limit","unreadable","caller-excluded"],"type":"string"}},"required":["path","reason"],"type":"object"},"maxItems":100000,"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"maxLength":100,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"manifests":{"description":"Value for manifests.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":10000,"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","maxLength":100,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"maxItems":10000,"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","maxLength":200,"minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","maxLength":100,"minLength":1,"type":"string"},"importer_version":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for importer version."}},"required":["importer","importer_version","caller"],"type":"object"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"from_path":{"description":"Local filesystem path for from.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"description":"Value for kind.","enum":["imports","requires","references","declares-module"],"type":"string"},"parse_state":{"description":"Value for parse state.","enum":["parsed","partial","unknown"],"type":"string"},"resolution":{"description":"Value for resolution.","enum":["internal","external","unresolved","unknown"],"type":"string"},"to":{"description":"Value for to.","maxLength":4096,"minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"maxItems":200000,"type":"array"},"root_alias":{"const":"$REFERENCE_ROOT","description":"Value for root alias.","type":"string"},"root_sha256":{"description":"Exact SHA-256 digest of root.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema":{"const":"HistoricalSourceGraph/v1","description":"Value for schema.","type":"string"},"vcs":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"dirty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for dirty."},"head":{"description":"Value for head.","pattern":"^(?:[a-f0-9]{40}|[a-f0-9]{64})$","type":"string"},"kind":{"const":"git","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"none","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"unknown","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"}]},{"type":"null"}],"description":"Value for vcs."}},"required":["schema","authority","root_alias","root_sha256","inventory_state","entries","relationships","parse_failures","exclusions","languages","manifests","vcs","provenance","limitations"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["reference","application"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"limits":{"additionalProperties":false,"default":{"max_application_nodes":20000,"max_candidate_evaluations":1000000,"max_candidate_nodes":100,"max_source_files":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_application_nodes":{"default":20000,"description":"Maximum permitted application nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_candidate_evaluations":{"default":1000000,"description":"Maximum permitted candidate evaluations for this operation.","maximum":10000000,"minimum":1,"type":"integer"},"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_source_files":{"default":10000,"description":"Maximum permitted source files for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"reference":{"additionalProperties":false,"description":"Value for reference.","properties":{"authority":{"const":"historical-reference","description":"Value for authority.","type":"string"},"entries":{"description":"Value for entries.","items":{"anyOf":[{"anyOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"const":"hashed","description":"Value for content state.","type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["redacted-secret","excluded","unreadable","too-large","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"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"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"tree_state":{"description":"Value for tree state.","enum":["enumerated","partial","excluded","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","tree_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"target":{"description":"Value for target.","maxLength":4096,"minLength":1,"type":"string"},"target_state":{"description":"Value for target state.","enum":["internal","external","missing","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","target","target_state"],"type":"object"}]},"maxItems":100000,"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","enum":["configured-secret","symlink-escape","size-limit","inventory-limit","unreadable","caller-excluded"],"type":"string"}},"required":["path","reason"],"type":"object"},"maxItems":100000,"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"maxLength":100,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"manifests":{"description":"Value for manifests.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":10000,"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","maxLength":100,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"maxItems":10000,"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","maxLength":200,"minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","maxLength":100,"minLength":1,"type":"string"},"importer_version":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for importer version."}},"required":["importer","importer_version","caller"],"type":"object"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"from_path":{"description":"Local filesystem path for from.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"description":"Value for kind.","enum":["imports","requires","references","declares-module"],"type":"string"},"parse_state":{"description":"Value for parse state.","enum":["parsed","partial","unknown"],"type":"string"},"resolution":{"description":"Value for resolution.","enum":["internal","external","unresolved","unknown"],"type":"string"},"to":{"description":"Value for to.","maxLength":4096,"minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"maxItems":200000,"type":"array"},"root_alias":{"const":"$REFERENCE_ROOT","description":"Value for root alias.","type":"string"},"root_sha256":{"description":"Exact SHA-256 digest of root.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema":{"const":"HistoricalSourceGraph/v1","description":"Value for schema.","type":"string"},"vcs":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"dirty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for dirty."},"head":{"description":"Value for head.","pattern":"^(?:[a-f0-9]{40}|[a-f0-9]{64})$","type":"string"},"kind":{"const":"git","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"none","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"unknown","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"}]},{"type":"null"}],"description":"Value for vcs."}},"required":["schema","authority","root_alias","root_sha256","inventory_state","entries","relationships","parse_failures","exclusions","languages","manifests","vcs","provenance","limitations"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["reference","application_evidence_id"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","reference":{"authority":"historical-reference","entries":[{"classifications":["source"],"kind":"directory","limitations":[],"path":"src","tree_state":"enumerated"},{"classifications":["source"],"content_state":"hashed","kind":"file","language":"TypeScript","limitations":[],"path":"src/main.ts","sha256":"2222222222222222222222222222222222222222222222222222222222222222","size":128}],"exclusions":[],"inventory_state":"complete","languages":["TypeScript"],"limitations":[],"manifests":[],"parse_failures":[],"provenance":{"caller":"contract-example","importer":"rea","importer_version":"1"},"relationships":[],"root_alias":"$REFERENCE_ROOT","root_sha256":"683969414c3e674a368392213c78021322fb39609b0c57f346b22da6464b2110","schema":"HistoricalSourceGraph/v1","vcs":{"dirty":null,"head":null,"kind":"none"}}}],"type":"object"},"kind":"application","name":"compare_source_to_bundle","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"omitted_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_evaluations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_unmapped_current_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reference_inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"retained_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","reference_inventory_state","application_graph_status","retained_source_files","omitted_source_files","retained_application_nodes","omitted_application_nodes","candidate_evaluations","omitted_candidate_evaluations","omitted_candidate_references","omitted_unmapped_current_nodes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"items":{"items":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["exact","high","medium","low"],"type":"string"},"current_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"current_node_kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"score":{"maximum":300,"minimum":1,"type":"integer"},"signals":{"items":{"additionalProperties":false,"properties":{"current_values":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":64,"minItems":1,"type":"array"},"kind":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"source_value":{"maxLength":4096,"minLength":1,"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["kind","weight","source_value","current_values"],"type":"object"},"maxItems":6,"minItems":1,"type":"array"}},"required":["current_node_id","current_node_kind","score","confidence","signals"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"mapping_id":{"pattern":"^stbc_item_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"source_path":{"maxLength":4096,"minLength":1,"type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"string"}},"required":["mapping_id","source_path","source_sha256","source_language","status","confidence","current_node_ids","candidates","omitted_candidates","limitations"],"type":"object"},"maxItems":100000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"reference":{"additionalProperties":false,"properties":{"inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["root_sha256","inventory_state"],"type":"object"},"scoring":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea-source-to-bundle-signals/v1","type":"string"},"minimum_candidate_score":{"const":20,"type":"number"},"weights":{"items":{"additionalProperties":false,"properties":{"signal":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["signal","weight"],"type":"object"},"type":"array"}},"required":["algorithm","minimum_candidate_score","weights"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"duplicated":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"merged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modified":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"split":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"object"},"unmapped_current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["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 bounded static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph, supplied as full Evidence or session Evidence IDs. Variants pair only by reciprocal unique literal discriminants; dynamic values, incomplete properties, and ambiguous variants remain unknown. Reports JSON Pointer changes and recommends controlled replay separately without executing JavaScript.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right"],"type":"object"},{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left_evidence_id","right"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left_evidence_id","right_evidence_id"],"type":"object"}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","left_export_name":"default","left_module_path":"parser.mjs","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111","right_export_name":"default","right_module_path":"parser.mjs"}],"type":"object"},"kind":"application","name":"compare_javascript_export_shapes","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"maxLength":4096,"type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["path","value"],"type":"object"},{"type":"null"}]},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"left_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"path":{"maxLength":4096,"type":"string"},"right":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"right_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"status":{"enum":["added","removed","changed","unknown"],"type":"string"}},"required":["change_id","status","path","discriminant","left","right","left_source_range","right_source_range","evidence_links","limitations"],"type":"object"},"maxItems":10000,"type":"array"},"comparison_id":{"pattern":"^jesc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"left_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"right_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"},"unpaired_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","left_graph_status","right_graph_status","paired_variants","unpaired_left_variants","unpaired_right_variants","omitted_left_variants","omitted_right_variants","left_source_omitted_variants","right_source_omitted_variants","left_omitted_fields","right_omitted_fields","left_omitted_property_coverage","right_omitted_property_coverage","omitted_candidates","omitted_changes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"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":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"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 approved: true and the exact plan digest. Supports deterministic boundary cases and optional left/right differential comparison; observations have controlled-replay authority and do not claim real application runtime behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"cases":[{"arguments":[""],"case_id":"empty"}],"determinism":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"left":{"entry_alias":"parser","entry_export":"default","modules":[{"alias":"parser","dependencies":{},"format":"esm","path":"/approved/parser.mjs","role":"module"}]},"limits":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"mode":"plan"}],"oneOf":[{"additionalProperties":false,"properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"execute","description":"Operation mode that selects the requested behavior.","type":"string"},"plan_digest":{"description":"Value for plan digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode","approved","plan_digest"],"type":"object"}],"type":"object"},"kind":"application","name":"run_controlled_replay","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"additionalProperties":false,"properties":{"evidence":{"type":"null"},"phase":{"const":"plan","type":"string"},"plan":{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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","zip","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","zip","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","zip","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 separate execution approval.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}],"properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"},"kind":"application","name":"prepare_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"phase":{"const":"preparation","type":"string"},"plan":{"additionalProperties":false,"properties":{"allowed_boundaries":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"properties":{"evidence":{"type":"null"},"phase":{"const":"plan","type":"string"},"plan":{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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","zip","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":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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","zip","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","zip","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 separately approved exact Node characterization plan in the owned controlled-replay boundary. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence; stale plans fail before execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved_plan_sha256":"0000000000000000000000000000000000000000000000000000000000000000","execution_approved":true,"preparation":{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}}],"properties":{"approved_plan_sha256":{"description":"Exact SHA-256 digest of approved plan.","pattern":"^[a-f0-9]{64}$","type":"string"},"execution_approved":{"const":true,"description":"Explicit operator approval for execution.","type":"boolean"},"preparation":{"additionalProperties":false,"description":"Value for preparation.","properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"}},"required":["execution_approved","approved_plan_sha256","preparation"],"type":"object"},"kind":"application","name":"execute_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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","zip","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","zip","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._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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","zip","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","zip","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":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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","zip","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","zip","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 one deterministic page of a 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. Every page carries the same full-ledger closure digest and typed per-obligation diagnostics.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"evidence_bundle":{"artifacts":[],"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"manifest":{"bindings":[],"contradictions":[]},"page":{"limit":50,"offset":0},"reviewed_obligations":[]}],"properties":{"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["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"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["bindings","contradictions"],"type":"object"},"page":{"additionalProperties":false,"description":"Value for page.","properties":{"limit":{"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"description":"Zero-based index of the first result to return.","maximum":10000,"minimum":0,"type":"integer"}},"required":["offset","limit"],"type":"object"},"reviewed_obligations":{"description":"Value for reviewed obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"disposition":{"description":"Value for disposition.","enum":["active","blocked","out-of-scope"],"type":"string"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"review_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the review observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","application_layer","family","target","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","disposition","review_evidence_ids"],"type":"object"},"type":"array"}},"required":["evidence_bundle","reviewed_obligations","manifest","page"],"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","zip","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._:/-]{0,199}$","type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"items":{"additionalProperties":false,"properties":{"application_layer":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"},"state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"maxLength":4096,"minLength":1,"type":"string"},"parser":{"maxLength":4096,"minLength":1,"type":"string"},"schema":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}]},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"properties":{"mode":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}]}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}]},"dependency_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"enum":["generated","reviewed"],"type":"string"},"required":{"type":"boolean"},"required_case_kinds":{"items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"type":"boolean"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"location":{"maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":100,"type":"array"},"ownership_graph":{"items":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"page":{"additionalProperties":false,"properties":{"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","limit","total","returned","next_offset"],"type":"object"},"reports":{"additionalProperties":false,"properties":{"contradicted_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","type":"string"},"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","evidence_links","limitations","page","obligations"],"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":false},"description":"Evaluate the fixed nine-stage public reconstruction journey into a deterministic ReconstructionReadinessReport/v1. Exact capability limits, provider routing, CLI/MCP status parity, bounded authority, partial-order comparison, contradictions, obligation closure, cleanup, and replay digests fail closed. Aggregate pass is emitted only when every required stage and check passes with attributable Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"capabilities":[{"authority_scopes":["investigation-input"],"available":true,"bounded":true,"capability_id":"analyze-javascript-application","limits":[{"name":"max-ast-nodes","unit":"count","value":2000000}],"side_effect":"reads-target","unavailable_reason":null}],"cleanup":[{"cancelled":true,"diagnostic_evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"owned_resources_remaining":0,"run_id":"run.cancelled"}],"client":{"name":"synthetic-mcp-client","negotiated_capabilities":["elicitation","progress","resources"],"version":"1"},"closure_history":[{"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"ledger_digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","newly_verified_obligation_ids":[],"required_open":1,"sequence":0,"status":"open"},{"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"ledger_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","newly_verified_obligation_ids":["obl.readiness"],"required_open":0,"sequence":1,"status":"ready"}],"comparisons":[{"comparison_id":"comparison.concurrent","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"schedule_semantics":"partial-order","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"equivalent"},{"comparison_id":"comparison.divergence","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":"/events/primary","divergence_refs":["/events/primary"],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"different"},{"comparison_id":"comparison.contradicted","concurrent":false,"contradiction_ids":["contradiction.artifact"],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"unknown"}],"contradictions":[{"affected_comparison_ids":["comparison.contradicted"],"contradiction_id":"contradiction.artifact","declared_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","ev_d297ba4d0bfa66962920a27465bb6c703ee925eb511b5a5c31698973a3a9ea16"],"observed_sha256":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","policy":"record-and-continue"}],"delegation_checks":[{"candidate_id":"candidate.reconstructed","delegates_to_authority":false,"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"]}],"evidence_bundle":{"artifacts":[],"captures":[],"environments":[],"providers":[{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"}],"records":[{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"authority"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"authority"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"subject":null},{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_d297ba4d0bfa66962920a27465bb6c703ee925eb511b5a5c31698973a3a9ea16","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"contradiction"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"contradiction"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"subject":null}],"scenarios":[{"authority":"controlled-replay","evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","operation":"run_reconstruction_readiness_fixture"},{"authority":"controlled-replay","evidence_id":"ev_d297ba4d0bfa66962920a27465bb6c703ee925eb511b5a5c31698973a3a9ea16","operation":"run_reconstruction_readiness_fixture"}],"unknowns":[]},"fixtures":[{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.native"],"environment_id":"environment.synthetic","fixture_id":"fixture.native","kind":"native"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.javascript-cli"],"environment_id":"environment.synthetic","fixture_id":"fixture.javascript-cli","kind":"javascript-cli"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.electron"],"environment_id":"environment.synthetic","fixture_id":"fixture.electron","kind":"electron"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.incomplete-reconstruction"],"environment_id":"environment.synthetic","fixture_id":"fixture.incomplete-reconstruction","kind":"incomplete-reconstruction"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.broken-runtime"],"environment_id":"environment.synthetic","fixture_id":"fixture.broken-runtime","kind":"broken-runtime"}],"grants":[{"decision":"denied","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"grant_id":"grant.denied","launched_process":false,"scope":"process-capture"},{"decision":"granted","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"grant_id":"grant.session","launched_process":true,"scope":"process-capture"}],"identity":{"catalog_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","cli_version":"2.4.0","providers":[{"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","provider_id":"javascript-application","reason_code":null,"state":"available","version":"1"},{"digest":null,"provider_id":"broken-runtime-probe","reason_code":"host-runtime-linker-failure","state":"broken-host","version":null}],"server_version":"2.4.0","skill_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","versions":[{"component":"rea-cli","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"},{"component":"rea-server","digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","remediation":"Restart the connected MCP server.","state":"stale","version":"2.3.0"},{"component":"rea-server","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"}]},"obligation_ledger":{"closure_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","coverage":{"status":"complete"},"dependency_graph":[],"evidence_links":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"ledger_id":"rol_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","limitations":[],"obligations":[{"application_layer":"process","authority_references":[{"authority":"controlled-replay","evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","location":"/fixture","state":"observed"}],"binding":{"fixtures":[{"authority":"packaged-process","case_kind":"positive","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"fixture_id":"fixture.positive"},{"authority":"packaged-process","case_kind":"negative","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"fixture_id":"fixture.negative"},{"authority":"packaged-process","case_kind":"malformed","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"fixture_id":"fixture.malformed"},{"authority":"packaged-process","case_kind":"cancellation","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"fixture_id":"fixture.cancellation"},{"authority":"packaged-process","case_kind":"teardown","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"fixture_id":"fixture.teardown"}],"obligation_id":"obl.readiness","original_cases":[{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"teardown","location":"/original/teardown"}],"owner":{"module_path":"src/readiness.ts","owner_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","symbol":"runReadiness"},"parser_type":null,"verifier":{"authority":"packaged-process","claim_id":"claim.readiness","command":"npm run verify:readiness","enumerated_obligation_ids":["obl.readiness"],"nondeterminism":{"mode":"partial-order","specification":"Startup precedes teardown."},"result_evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","status":"pass","verifier_id":"verifier.readiness"}},"dependency_obligation_ids":[],"diagnostics":[],"family":"packaged-process-lifecycle","obligation_id":"obl.readiness","obligation_version":1,"observed_cases":[{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572","kind":"teardown","location":"/original/teardown"}],"origin":"reviewed","required":true,"required_case_kinds":["positive","negative","malformed","cancellation","teardown"],"required_fixture_authority":"packaged-process","required_next_evidence":[],"required_original_authority":"process","required_verifier_authority":"packaged-process","requires_parser_type":false,"residual_unknown_ids":[],"source_state":"observed","status":"verified","target":{"application_node_id":null,"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","location":"/fixture","semantic_node_id":null},"title":"Preserve the packaged readiness fixture lifecycle","unavailable_authority":[]}],"ownership_graph":[{"module_path":"src/readiness.ts","obligation_id":"obl.readiness","symbol":"runReadiness"}],"reports":{"contradicted_obligation_ids":[],"missing_owner_obligation_ids":[],"missing_verifier_obligation_ids":[],"residual_unknown_ids":[]},"schema":"ReconstructionObligationLedger","status":"ready","summary":{"by_application_layer":[{"count":0,"key":"cli"},{"count":0,"key":"protocol"},{"count":0,"key":"electron"},{"count":0,"key":"persistence"},{"count":1,"key":"process"},{"count":0,"key":"runtime"},{"count":0,"key":"packaging"},{"count":0,"key":"native-abi"},{"count":0,"key":"application"},{"count":0,"key":"other"}],"by_evidence_authority":[{"count":0,"key":"candidate"},{"count":1,"key":"observed"},{"count":0,"key":"reviewed"},{"count":0,"key":"unknown"}],"by_status":[{"count":0,"key":"unowned"},{"count":0,"key":"characterized"},{"count":0,"key":"implemented"},{"count":1,"key":"verified"},{"count":0,"key":"contradicted"},{"count":0,"key":"blocked"},{"count":0,"key":"out-of-scope"},{"count":0,"key":"unknown"}],"required":1,"required_open":0,"total":1,"verified":1}},"operation_outcomes":[{"call_kind":"valid","cli_exit_code":0,"error_code":null,"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"expected_success":true,"mcp_status":null,"operation":"inspect-artifact","recovered":false,"sequence":0,"surface":"cli"},{"call_kind":"valid","cli_exit_code":null,"error_code":null,"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"expected_success":true,"mcp_status":"success","operation":"inspect-artifact","recovered":false,"sequence":1,"surface":"mcp"},{"call_kind":"permission","cli_exit_code":2,"error_code":"permission-required","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"expected_success":false,"mcp_status":null,"operation":"capture-process","recovered":true,"sequence":2,"surface":"cli"},{"call_kind":"permission","cli_exit_code":null,"error_code":"permission-required","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"expected_success":false,"mcp_status":"non-success","operation":"capture-process","recovered":true,"sequence":3,"surface":"mcp"}],"replay":{"deterministic":true,"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"expected_source_digest":null,"stale_input_detected":true,"tamper_detected":true},"stages":[{"capability_issue":null,"checks":[{"check_id":"target-free-start","detail":"Synthetic conformance proved target-free-start.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"artifact-inventory","detail":"Synthetic conformance proved artifact-inventory.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"compatible-workflow-selected","detail":"Synthetic conformance proved compatible-workflow-selected.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"limits-visible","detail":"Synthetic conformance proved limits-visible.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"discover-classify","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"broken-runtime-distinguished","detail":"Synthetic conformance proved broken-runtime-distinguished.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"version-skew-detected","detail":"Synthetic conformance proved version-skew-detected.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"revision-changed-after-recovery","detail":"Synthetic conformance proved revision-changed-after-recovery.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"diagnose-environment","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"missing-scope-reported","detail":"Synthetic conformance proved missing-scope-reported.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"narrow-grant-resumed","detail":"Synthetic conformance proved narrow-grant-resumed.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"expansion-reprompted","detail":"Synthetic conformance proved expansion-reprompted.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"denial-launched-nothing","detail":"Synthetic conformance proved denial-launched-nothing.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"acquire-authority","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"native-routed","detail":"Synthetic conformance proved native-routed.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"javascript-routed","detail":"Synthetic conformance proved javascript-routed.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"unknowns-preserved","detail":"Synthetic conformance proved unknowns-preserved.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"static-analysis","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"predicate-driven","detail":"Synthetic conformance proved predicate-driven.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"descendant-settled","detail":"Synthetic conformance proved descendant-settled.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"electron-correlated","detail":"Synthetic conformance proved electron-correlated.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"cancel-cleanup-preserved-evidence","detail":"Synthetic conformance proved cancel-cleanup-preserved-evidence.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"reactive-scenarios","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"partial-order-accepted","detail":"Synthetic conformance proved partial-order-accepted.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"divergence-localized","detail":"Synthetic conformance proved divergence-localized.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"incomplete-is-unknown","detail":"Synthetic conformance proved incomplete-is-unknown.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"compare-authority-candidate","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"record-and-continue","detail":"Synthetic conformance proved record-and-continue.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"affected-equivalence-blocked","detail":"Synthetic conformance proved affected-equivalence-blocked.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"unaffected-comparison-continued","detail":"Synthetic conformance proved unaffected-comparison-continued.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"preserve-contradictions","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"incomplete-detected","detail":"Synthetic conformance proved incomplete-detected.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"incremental-verifier-closure","detail":"Synthetic conformance proved incremental-verifier-closure.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"delegation-rejected","detail":"Synthetic conformance proved delegation-rejected.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"verify-reconstruction-closure","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"cli-mcp-parity","detail":"Synthetic conformance proved cli-mcp-parity.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"failure-status-parity","detail":"Synthetic conformance proved failure-status-parity.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"deterministic-replay","detail":"Synthetic conformance proved deterministic-replay.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"tamper-detected","detail":"Synthetic conformance proved tamper-detected.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"},{"check_id":"stale-input-detected","detail":"Synthetic conformance proved stale-input-detected.","evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"status":"pass"}],"evidence_ids":["ev_0ba764c26405ec22b3d7ae738f65cf06511d06e0a12a658cd6ad1a79ff6d6572"],"next_action":null,"required":true,"stage_id":"export-replay","status":"pass"}],"workflow_candidates":[{"compatibility":"compatible","fixture_id":"fixture.native","invoked":true,"provider_id":"provider.native","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.native"},{"compatibility":"compatible","fixture_id":"fixture.javascript-cli","invoked":true,"provider_id":"provider.javascript-cli","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.javascript-cli"},{"compatibility":"compatible","fixture_id":"fixture.electron","invoked":true,"provider_id":"provider.electron","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.electron"},{"compatibility":"compatible","fixture_id":"fixture.incomplete-reconstruction","invoked":true,"provider_id":"provider.incomplete-reconstruction","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.incomplete-reconstruction"},{"compatibility":"compatible","fixture_id":"fixture.broken-runtime","invoked":true,"provider_id":null,"reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.broken-runtime"}]}],"properties":{"capabilities":{"description":"Value for capabilities.","items":{"additionalProperties":false,"properties":{"authority_scopes":{"description":"Value for authority scopes.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"available":{"description":"Value for available.","type":"boolean"},"bounded":{"description":"Value for bounded.","type":"boolean"},"capability_id":{"description":"Value for capability id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"limits":{"description":"Bounded resource-consumption and result-size limits for this operation.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"unit":{"description":"Value for unit.","enum":["count","bytes","milliseconds","ratio"],"type":"string"},"value":{"description":"Value for value.","minimum":0,"type":"number"}},"required":["name","value","unit"],"type":"object"},"maxItems":100,"type":"array"},"side_effect":{"description":"Value for side effect.","enum":["none","reads-target","launches-process","writes-workspace","network-observation"],"type":"string"},"unavailable_reason":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for unavailable reason."}},"required":["capability_id","available","bounded","side_effect","authority_scopes","limits","unavailable_reason"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"cleanup":{"description":"Value for cleanup.","items":{"additionalProperties":false,"properties":{"cancelled":{"description":"Value for cancelled.","type":"boolean"},"diagnostic_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the diagnostic observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"owned_resources_remaining":{"description":"Value for owned resources remaining.","maximum":9007199254740991,"minimum":0,"type":"integer"},"run_id":{"description":"Value for run id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["run_id","cancelled","owned_resources_remaining","diagnostic_evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"client":{"additionalProperties":false,"description":"Value for client.","properties":{"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"negotiated_capabilities":{"description":"Value for negotiated capabilities.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"version":{"description":"Value for version.","maxLength":4096,"minLength":1,"type":"string"}},"required":["name","version","negotiated_capabilities"],"type":"object"},"closure_history":{"description":"Value for closure history.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"ledger_digest":{"description":"Value for ledger digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"newly_verified_obligation_ids":{"description":"Value for newly verified obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"}},"required":["sequence","ledger_digest","status","required_open","newly_verified_obligation_ids","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":2,"type":"array"},"comparisons":{"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"comparison_id":{"description":"Value for comparison id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"concurrent":{"description":"Value for concurrent.","type":"boolean"},"contradiction_ids":{"description":"Value for contradiction ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"deliberate_divergence_ref":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for deliberate divergence ref."},"divergence_refs":{"description":"Value for divergence refs.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schedule_semantics":{"description":"Value for schedule semantics.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"},"unavailable_authority":{"description":"Value for unavailable authority.","type":"boolean"},"unstable":{"description":"Value for unstable.","type":"boolean"},"verdict":{"description":"Value for verdict.","enum":["equivalent","different","unknown"],"type":"string"}},"required":["comparison_id","verdict","schedule_semantics","concurrent","truncated","unavailable_authority","unstable","deliberate_divergence_ref","divergence_refs","contradiction_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"affected_comparison_ids":{"description":"Value for affected comparison ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"declared_sha256":{"description":"Exact SHA-256 digest of declared.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"observed_sha256":{"description":"Exact SHA-256 digest of observed.","pattern":"^[a-f0-9]{64}$","type":"string"},"policy":{"const":"record-and-continue","description":"Value for policy.","type":"string"}},"required":["contradiction_id","declared_sha256","observed_sha256","policy","affected_comparison_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"delegation_checks":{"description":"Value for delegation checks.","items":{"additionalProperties":false,"properties":{"candidate_id":{"description":"Value for candidate id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"delegates_to_authority":{"description":"Value for delegates to authority.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"}},"required":["candidate_id","delegates_to_authority","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"deliberate_faults":{"description":"Value for deliberate faults.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"environment_id":{"description":"Value for environment id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","enum":["native","javascript-cli","electron","incomplete-reconstruction","broken-runtime"],"type":"string"}},"required":["fixture_id","kind","artifact_sha256","environment_id","deliberate_faults"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"grants":{"description":"Value for grants.","items":{"additionalProperties":false,"properties":{"decision":{"description":"Value for decision.","enum":["granted","denied","cancelled","restart-required"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"grant_id":{"description":"Value for grant id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"launched_process":{"description":"Value for launched process.","type":"boolean"},"scope":{"description":"Value for scope.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["grant_id","scope","decision","launched_process","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"identity":{"additionalProperties":false,"description":"Value for identity.","properties":{"catalog_digest":{"description":"Value for catalog digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"cli_version":{"description":"Value for cli version.","maxLength":4096,"minLength":1,"type":"string"},"providers":{"description":"Value for providers.","items":{"additionalProperties":false,"properties":{"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"provider_id":{"description":"Exact deep-analysis provider ID, or automatic selection when omitted.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"reason_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for reason code."},"state":{"description":"Value for state.","enum":["available","unavailable","incompatible","broken-host"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["provider_id","version","digest","state","reason_code"],"type":"object"},"maxItems":100,"type":"array"},"server_version":{"description":"Value for server version.","maxLength":4096,"minLength":1,"type":"string"},"skill_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for skill digest."},"versions":{"description":"Value for versions.","items":{"additionalProperties":false,"properties":{"component":{"description":"Value for component.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"remediation":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for remediation."},"state":{"description":"Value for state.","enum":["current","stale","unavailable"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["component","version","digest","state","remediation"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["cli_version","server_version","catalog_digest","skill_digest","versions","providers"],"type":"object"},"obligation_ledger":{"additionalProperties":false,"description":"Value for obligation ledger.","properties":{"closure_digest":{"description":"Value for closure digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"status":{"description":"Current lifecycle or verification status.","enum":["complete","partial"],"type":"string"}},"required":["status"],"type":"object"},"dependency_graph":{"description":"Value for dependency graph.","items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"description":"Value for depends on obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"description":"Value for ledger id.","pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"description":"Value for obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"description":"Value for authority references.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"state":{"description":"Value for state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"description":"Value for case kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}],"description":"Value for binding."},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"description":"Value for diagnostics.","items":{"additionalProperties":false,"properties":{"code":{"description":"Value for code.","enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"description":"Value for detail.","maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"description":"Value for observed cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"description":"Value for origin.","enum":["generated","reviewed"],"type":"string"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"description":"Value for source state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":10000,"type":"array"},"ownership_graph":{"description":"Value for ownership graph.","items":{"additionalProperties":false,"properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"reports":{"additionalProperties":false,"description":"Value for reports.","properties":{"contradicted_obligation_ids":{"description":"Value for contradicted obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"description":"Value for missing owner obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"description":"Value for missing verifier obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","description":"Value for schema.","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"description":"Concise evidence-backed summary of the result.","properties":{"by_application_layer":{"description":"Value for by application layer.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_evidence_authority":{"description":"Value for by evidence authority.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_status":{"description":"Value for by status.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"required":{"description":"Value for required.","maximum":9007199254740991,"minimum":0,"type":"integer"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"description":"Value for verified.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","required","verified","required_open","by_status","by_application_layer","by_evidence_authority"],"type":"object"}},"required":["schema","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","obligations","evidence_links","limitations"],"type":"object"},"operation_outcomes":{"description":"Value for operation outcomes.","items":{"additionalProperties":false,"properties":{"call_kind":{"description":"Value for call kind.","enum":["valid","malformed","over-limit","incompatible-provider","setup","permission","operation"],"type":"string"},"cli_exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for cli exit code."},"error_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for error code."},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_success":{"description":"Expected success used to reject stale or mismatched input.","type":"boolean"},"mcp_status":{"anyOf":[{"enum":["success","non-success"],"type":"string"},{"type":"null"}],"description":"Value for mcp status."},"operation":{"description":"Value for operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"recovered":{"description":"Value for recovered.","type":"boolean"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"surface":{"description":"Value for surface.","enum":["cli","mcp"],"type":"string"}},"required":["sequence","operation","surface","call_kind","expected_success","cli_exit_code","mcp_status","error_code","recovered","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"deterministic":{"description":"Value for deterministic.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_source_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Expected source digest used to reject stale or mismatched input."},"stale_input_detected":{"description":"Value for stale input detected.","type":"boolean"},"tamper_detected":{"description":"Value for tamper detected.","type":"boolean"}},"required":["expected_source_digest","deterministic","tamper_detected","stale_input_detected","evidence_ids"],"type":"object"},"stages":{"description":"Value for stages.","items":{"additionalProperties":false,"properties":{"capability_issue":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for capability issue."},"checks":{"description":"Value for checks.","items":{"additionalProperties":false,"properties":{"check_id":{"description":"Value for check id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"detail":{"description":"Value for detail.","maxLength":4096,"minLength":1,"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["check_id","status","detail","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"next_action":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for next action."},"required":{"description":"Value for required.","type":"boolean"},"stage_id":{"description":"Value for stage id.","enum":["discover-classify","diagnose-environment","acquire-authority","static-analysis","reactive-scenarios","compare-authority-candidate","preserve-contradictions","verify-reconstruction-closure","export-replay"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["stage_id","required","status","capability_issue","next_action","evidence_ids","checks"],"type":"object"},"maxItems":9,"minItems":9,"type":"array"},"workflow_candidates":{"description":"Value for workflow candidates.","items":{"additionalProperties":false,"properties":{"compatibility":{"description":"Value for compatibility.","enum":["compatible","incompatible","unavailable"],"type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"invoked":{"description":"Value for invoked.","type":"boolean"},"provider_id":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"reason_code":{"description":"Value for reason code.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selected":{"description":"Value for selected.","type":"boolean"},"workflow_id":{"description":"Value for workflow id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","workflow_id","provider_id","selected","invoked","compatibility","reason_code"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"}},"required":["identity","client","capabilities","fixtures","workflow_candidates","grants","evidence_bundle","comparisons","contradictions","obligation_ledger","operation_outcomes","cleanup","closure_history","delegation_checks","replay","stages"],"type":"object"},"kind":"application","name":"evaluate_reconstruction_readiness","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"findings":{"items":{"additionalProperties":false,"properties":{"code":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"stage_id":{"enum":["discover-classify","diagnose-environment","acquire-authority","static-analysis","reactive-scenarios","compare-authority-candidate","preserve-contradictions","verify-reconstruction-closure","export-replay"],"type":"string"},"status":{"enum":["fail","unknown"],"type":"string"}},"required":["code","stage_id","status","detail","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"metrics":{"additionalProperties":false,"properties":{"cleanup_leak_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"divergence_localization_precision":{"maximum":1,"minimum":0,"type":"number"},"failed_calls_before_prerequisites":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"false_equivalence_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_valid_workflow_selection_rate":{"maximum":1,"minimum":0,"type":"number"},"incompatible_provider_invocations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"malformed_or_over_limit_call_rate":{"maximum":1,"minimum":0,"type":"number"},"nondeterministic_replay_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"recovery_rate":{"maximum":1,"minimum":0,"type":"number"},"unowned_obligation_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_valid_workflow_selection_rate","malformed_or_over_limit_call_rate","incompatible_provider_invocations","failed_calls_before_prerequisites","recovery_rate","divergence_localization_precision","false_equivalence_count","unowned_obligation_count","cleanup_leak_count","nondeterministic_replay_count"],"type":"object"},"report_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"report_id":{"pattern":"^rr_[a-f0-9]{64}$","type":"string"},"schema":{"const":"ReconstructionReadinessReport","type":"string"},"snapshot":{"additionalProperties":false,"properties":{"capabilities":{"items":{"additionalProperties":false,"properties":{"authority_scopes":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"available":{"type":"boolean"},"bounded":{"type":"boolean"},"capability_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"limits":{"items":{"additionalProperties":false,"properties":{"name":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"unit":{"enum":["count","bytes","milliseconds","ratio"],"type":"string"},"value":{"minimum":0,"type":"number"}},"required":["name","value","unit"],"type":"object"},"maxItems":100,"type":"array"},"side_effect":{"enum":["none","reads-target","launches-process","writes-workspace","network-observation"],"type":"string"},"unavailable_reason":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["capability_id","available","bounded","side_effect","authority_scopes","limits","unavailable_reason"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"cleanup":{"items":{"additionalProperties":false,"properties":{"cancelled":{"type":"boolean"},"diagnostic_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"owned_resources_remaining":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"run_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["run_id","cancelled","owned_resources_remaining","diagnostic_evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"client":{"additionalProperties":false,"properties":{"name":{"maxLength":4096,"minLength":1,"type":"string"},"negotiated_capabilities":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"version":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["name","version","negotiated_capabilities"],"type":"object"},"closure_history":{"items":{"additionalProperties":false,"properties":{"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"ledger_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"newly_verified_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"required_open":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["ready","open","failed","unknown"],"type":"string"}},"required":["sequence","ledger_digest","status","required_open","newly_verified_obligation_ids","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":2,"type":"array"},"comparisons":{"items":{"additionalProperties":false,"properties":{"comparison_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"concurrent":{"type":"boolean"},"contradiction_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"deliberate_divergence_ref":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"divergence_refs":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schedule_semantics":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"truncated":{"type":"boolean"},"unavailable_authority":{"type":"boolean"},"unstable":{"type":"boolean"},"verdict":{"enum":["equivalent","different","unknown"],"type":"string"}},"required":["comparison_id","verdict","schedule_semantics","concurrent","truncated","unavailable_authority","unstable","deliberate_divergence_ref","divergence_refs","contradiction_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"contradictions":{"items":{"additionalProperties":false,"properties":{"affected_comparison_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"contradiction_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy":{"const":"record-and-continue","type":"string"}},"required":["contradiction_id","declared_sha256","observed_sha256","policy","affected_comparison_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"delegation_checks":{"items":{"additionalProperties":false,"properties":{"candidate_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"delegates_to_authority":{"type":"boolean"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"}},"required":["candidate_id","delegates_to_authority","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_bundle":{"additionalProperties":false,"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","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","zip","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","zip","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"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"fixtures":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"deliberate_faults":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"environment_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"enum":["native","javascript-cli","electron","incomplete-reconstruction","broken-runtime"],"type":"string"}},"required":["fixture_id","kind","artifact_sha256","environment_id","deliberate_faults"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"grants":{"items":{"additionalProperties":false,"properties":{"decision":{"enum":["granted","denied","cancelled","restart-required"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"grant_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"launched_process":{"type":"boolean"},"scope":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["grant_id","scope","decision","launched_process","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"identity":{"additionalProperties":false,"properties":{"catalog_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"cli_version":{"maxLength":4096,"minLength":1,"type":"string"},"providers":{"items":{"additionalProperties":false,"properties":{"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"reason_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}]},"state":{"enum":["available","unavailable","incompatible","broken-host"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["provider_id","version","digest","state","reason_code"],"type":"object"},"maxItems":100,"type":"array"},"server_version":{"maxLength":4096,"minLength":1,"type":"string"},"skill_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"versions":{"items":{"additionalProperties":false,"properties":{"component":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"remediation":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"state":{"enum":["current","stale","unavailable"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["component","version","digest","state","remediation"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["cli_version","server_version","catalog_digest","skill_digest","versions","providers"],"type":"object"},"obligation_ledger":{"additionalProperties":false,"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._:/-]{0,199}$","type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"items":{"additionalProperties":false,"properties":{"application_layer":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"},"state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"maxLength":4096,"minLength":1,"type":"string"},"parser":{"maxLength":4096,"minLength":1,"type":"string"},"schema":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}]},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"properties":{"mode":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}]}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}]},"dependency_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"enum":["generated","reviewed"],"type":"string"},"required":{"type":"boolean"},"required_case_kinds":{"items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"type":"boolean"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"location":{"maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":10000,"type":"array"},"ownership_graph":{"items":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"reports":{"additionalProperties":false,"properties":{"contradicted_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","type":"string"},"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"},"operation_outcomes":{"items":{"additionalProperties":false,"properties":{"call_kind":{"enum":["valid","malformed","over-limit","incompatible-provider","setup","permission","operation"],"type":"string"},"cli_exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"error_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_success":{"type":"boolean"},"mcp_status":{"anyOf":[{"enum":["success","non-success"],"type":"string"},{"type":"null"}]},"operation":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"recovered":{"type":"boolean"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"surface":{"enum":["cli","mcp"],"type":"string"}},"required":["sequence","operation","surface","call_kind","expected_success","cli_exit_code","mcp_status","error_code","recovered","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"replay":{"additionalProperties":false,"properties":{"deterministic":{"type":"boolean"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_source_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stale_input_detected":{"type":"boolean"},"tamper_detected":{"type":"boolean"}},"required":["expected_source_digest","deterministic","tamper_detected","stale_input_detected","evidence_ids"],"type":"object"},"stages":{"items":{"additionalProperties":false,"properties":{"capability_issue":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}]},"checks":{"items":{"additionalProperties":false,"properties":{"check_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["check_id","status","detail","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"next_action":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"required":{"type":"boolean"},"stage_id":{"enum":["discover-classify","diagnose-environment","acquire-authority","static-analysis","reactive-scenarios","compare-authority-candidate","preserve-contradictions","verify-reconstruction-closure","export-replay"],"type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["stage_id","required","status","capability_issue","next_action","evidence_ids","checks"],"type":"object"},"maxItems":9,"minItems":9,"type":"array"},"workflow_candidates":{"items":{"additionalProperties":false,"properties":{"compatibility":{"enum":["compatible","incompatible","unavailable"],"type":"string"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"invoked":{"type":"boolean"},"provider_id":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}]},"reason_code":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selected":{"type":"boolean"},"workflow_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","workflow_id","provider_id","selected","invoked","compatibility","reason_code"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"}},"required":["identity","client","capabilities","fixtures","workflow_candidates","grants","evidence_bundle","comparisons","contradictions","obligation_ledger","operation_outcomes","cleanup","closure_history","delegation_checks","replay","stages"],"type":"object"},"source_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stages":{"items":{"additionalProperties":false,"properties":{"capability_issue":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}]},"checks":{"items":{"additionalProperties":false,"properties":{"check_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["check_id","status","detail","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"next_action":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"required":{"type":"boolean"},"stage_id":{"enum":["discover-classify","diagnose-environment","acquire-authority","static-analysis","reactive-scenarios","compare-authority-candidate","preserve-contradictions","verify-reconstruction-closure","export-replay"],"type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["stage_id","required","status","capability_issue","next_action","evidence_ids","checks"],"type":"object"},"maxItems":9,"minItems":9,"type":"array"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"failed_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed_required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["stages","required_stages","passed_required_stages","findings","failed_findings","unknown_findings"],"type":"object"}},"required":["schema","report_id","source_digest","report_digest","status","summary","metrics","stages","findings","evidence_links","snapshot"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Evaluate Reconstruction Readiness"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Atomically commit one canonical evidence-backed reconstruction coverage workspace revision under an approved root. CAS revisions reject lost updates; every Evidence and residual-unknown reference must resolve in the embedded canonical bundle.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"expected_revision":null,"workspace":{"artifacts":[],"boundaries":[],"claims":[],"contradictions":[],"evidence_bundle":{"artifacts":[],"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"name":"replacement","owners":[],"package_proofs":[],"previous_revision_sha256":null,"residual_unknown_ids":[],"revision":1,"revision_sha256":"0000000000000000000000000000000000000000000000000000000000000000","surfaces":[],"verifier_contracts":[],"verifier_results":[],"workspace_id":"rcw_0000000000000000000000000000000000000000000000000000000000000000"},"workspace_path":"/approved/coverage.json"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_revision":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Expected revision used to reject stale or mismatched input."},"workspace":{"additionalProperties":false,"description":"Value for workspace.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"environment_sha256":{"description":"Exact SHA-256 digest of environment.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"version":{"description":"Value for version.","maxLength":500,"minLength":1,"type":"string"}},"required":["artifact_id","artifact_sha256","version","environment_sha256","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"boundaries":{"description":"Value for boundaries.","items":{"additionalProperties":false,"properties":{"allowed_dispositions":{"description":"Value for allowed dispositions.","items":{"enum":["external","non-goal"],"type":"string"},"maxItems":2,"type":"array"},"allowed_unknown_ids":{"description":"Value for allowed unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"required_claim_ids":{"description":"Value for required claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"required_package_proof_kinds":{"description":"Value for required package proof kinds.","items":{"enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_surface_ids":{"description":"Value for required surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["boundary_id","title","required_surface_ids","required_claim_ids","required_package_proof_kinds","allowed_dispositions","allowed_unknown_ids"],"type":"object"},"maxItems":1000,"type":"array"},"claims":{"description":"Value for claims.","items":{"additionalProperties":false,"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","maxLength":100,"minLength":1,"type":"string"},"required_authority":{"description":"Value for required authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"required_dimensions":{"description":"Value for required dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","kind","surface_ids","required_dimensions","required_authority"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":2,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["active","resolved"],"type":"string"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"}},"required":["contradiction_id","status","surface_ids","claim_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"},"owners":{"description":"Value for owners.","items":{"additionalProperties":false,"properties":{"ownership":{"description":"Value for ownership.","oneOf":[{"additionalProperties":false,"properties":{"authority_route":{"description":"Value for authority route.","enum":["none","detected","unknown"],"type":"string"},"disposition":{"const":"implemented","description":"Value for disposition.","type":"string"},"owner_export":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for owner export."},"owner_path":{"description":"Local filesystem path for owner.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"package_state":{"description":"Value for package state.","enum":["distributed","missing","unknown"],"type":"string"},"path_state":{"description":"Value for path state.","enum":["present","missing","unknown"],"type":"string"}},"required":["disposition","owner_path","owner_export","owner_sha256","path_state","package_state","authority_route"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["external","non-goal"],"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":4096,"minLength":1,"type":"string"}},"required":["disposition","rationale"],"type":"object"}]},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","ownership"],"type":"object"},"maxItems":10000,"type":"array"},"package_proofs":{"description":"Value for package proofs.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"kind":{"description":"Value for kind.","enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"proof_id":{"description":"Value for proof id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"}},"required":["proof_id","kind","status","artifact_sha256s","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"previous_revision_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of previous revision."},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"surfaces":{"description":"Value for surfaces.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"authority":{"description":"Value for authority.","enum":["observed","derived","inferred","historical","external"],"type":"string"},"dependency_surface_ids":{"description":"Value for dependency surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for occurrence id."},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","family","artifact_id","occurrence_id","location","authority","dependency_surface_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_contracts":{"description":"Value for verifier contracts.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"dimensions":{"description":"Value for dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"max_age_ms":{"description":"Maximum permitted age ms for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"minimum_repeats":{"description":"Value for minimum repeats.","maximum":1000,"minimum":1,"type":"integer"},"normalization_removes_dimensions":{"const":false,"description":"Value for normalization removes dimensions.","type":"boolean"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_ids","dimensions","authority","max_age_ms","minimum_repeats","normalization_sha256","normalization_removes_dimensions","contract_sha256"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_results":{"description":"Value for verifier results.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"covered_claim_ids":{"description":"Value for covered claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"covered_dimensions":{"description":"Value for covered dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"observed_at":{"description":"Value for observed at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z|([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)))$","type":"string"},"owner_sha256s":{"description":"Value for owner sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"repeats":{"description":"Value for repeats.","maximum":1000,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","contract_sha256","observed_at","status","covered_claim_ids","covered_dimensions","artifact_sha256s","owner_sha256s","normalization_sha256","repeats","evidence_ids"],"type":"object"},"maxItems":100000,"type":"array"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["workspace_id","name","revision","previous_revision_sha256","evidence_bundle","artifacts","surfaces","owners","claims","verifier_contracts","verifier_results","residual_unknown_ids","contradictions","package_proofs","boundaries","revision_sha256"],"type":"object"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","expected_revision","workspace"],"type":"object"},"kind":"application","name":"commit_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"pattern":"^rcw_[a-f0-9]{64}$","type":"string"},"workspace_path":{"type":"string"}},"required":["workspace_path","bytes","workspace_id","revision","revision_sha256","evidence_records"],"type":"object"},"requiresSession":false,"title":"Commit Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate one named reconstruction boundary from a canonical coverage workspace. Missing ownership or inventory is partial; stale, weak, truncated, skipped, or unresolved proof is unknown; contradictions, failed proof, missing owners, and authority routing fail closed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"boundary_id":"replacement.cli","workspace_path":"/approved/coverage.json"}],"properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["workspace_path","boundary_id"],"type":"object"},"kind":"application","name":"query_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"boundary_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"reasons":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["surface-missing","owner-missing","owner-duplicate","owner-path-missing","owner-path-unknown","owner-undistributed","owner-distribution-unknown","authority-routing-detected","authority-routing-unknown","disposition-not-allowed","dependency-surface-missing","claim-missing","verifier-missing","verifier-duplicate","verifier-result-missing","verifier-result-stale","verifier-result-incompatible","verifier-failed","verifier-unknown","active-unknown","active-contradiction","package-proof-missing","package-proof-failed","package-proof-unknown"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["code","subject_id","detail"],"type":"object"},"maxItems":100000,"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["operation","subject_id","rationale"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"enum":["partial","failed","unknown","ready"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"reasons":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_claims":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_surfaces":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["required_surfaces","required_claims","reasons"],"type":"object"},"workspace_revision_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["boundary_id","status","workspace_revision_sha256","summary","reasons","recommended_probes","evidence_ids"],"type":"object"},"requiresSession":false,"title":"Query Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Open a local executable, application bundle, archive, JavaScript, source map, plist, or analysis database after validation. provider_id selects one deep provider or deterministic auto selection; the binding remains stable until close or an explicit switch, with no failure fallback. An optional snapshot v2 is imported atomically and must match the binary identity, concrete provider, and canonical analysis profile exactly.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"path":"/tmp/fixture"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"provider_id":{"anyOf":[{"const":"auto","type":"string"},{"minLength":1,"pattern":"^[a-z][a-z0-9-]*$","type":"string"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"open_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"loaderArgs":{"items":{"type":"string"},"type":"array"},"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","format","kind","loaderArgs","sha256","architecture"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Open Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Optionally write a provider-neutral analysis snapshot atomically, then close the active target and every provider resource started for it. Snapshot files require an operator-approved root and explicit overwrite; a failed save leaves the session open so cached analysis is not lost.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"overwrite":false}],"properties":{"overwrite":{"default":false,"description":"Whether an existing destination may be replaced.","type":"boolean"},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"close_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"null"},{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"entries":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"}},"required":["path","bytes","entries"],"type":"object"}]}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Close Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Report 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","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__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"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"open":{"const":false,"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__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,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"}},"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","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__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"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"open":{"const":true,"type":"boolean"},"path":{"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__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,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"}},"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 a bounded local JSON bundle beneath an operator-approved root, validate every Evidence v2 ID and canonical manifest, then atomically merge it. Imported content is data only and is never executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"path":"evidence.json"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"import_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"imported":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["imported","unknowns_added","total"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Import Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run one bounded process under a PTY using operator-approved executable and working roots. Produces process capture Evidence. Requires approved: true; unknown_registry_approved: true separately records capture residuals. Captures raw and xterm-rendered terminal frames, scripted interactions, lifecycle filesystem checkpoints, process ownership, declarative command shims, and loopback replay. Disabled unless operator policy enables it; not a security sandbox.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":false,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"oneOf":[{"additionalProperties":false,"properties":{"cardinality":{"additionalProperties":false,"description":"Value for cardinality.","properties":{"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":256,"type":"integer"}},"required":["min","max"],"type":"object"},"consume":{"description":"Value for consume.","type":"boolean"},"exact":{"$ref":"#/$defs/__schema1","description":"Value for exact."},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"kind":{"const":"event","description":"Value for kind.","type":"string"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["kind","source","exact","ignore_fields","since","consume","cardinality"],"type":"object"},{"additionalProperties":false,"properties":{"case_sensitive":{"const":true,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"consume":{"description":"Value for consume.","type":"boolean"},"control_sequences":{"const":"include","description":"Value for control sequences.","type":"string"},"encoding":{"const":"utf8","description":"Value for encoding.","type":"string"},"kind":{"const":"terminal_text","description":"Value for kind.","type":"string"},"literal":{"description":"Value for literal.","maxLength":10000,"minLength":1,"type":"string"},"occurrence":{"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"view":{"const":"decoded","description":"Value for view.","type":"string"}},"required":["kind","view","encoding","literal","case_sensitive","control_sequences","occurrence","since","consume"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"all","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"any","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"sequence","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":1,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"repeat","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"trigger":{"$ref":"#/$defs/__schema0","description":"Value for trigger."}},"required":["kind","trigger","min","max"],"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"arguments":[],"checkpoints":[],"command_shims":[],"environment":{},"events":[],"executable":"/usr/bin/true","filesystem_roots":[],"idle_timeout_ms":30000,"inherit_environment":[],"limits":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"network_access":"host","normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"reactive":null,"replay":{"http":[],"machine":null,"websocket_connections":[],"websocket_messages":[]},"secret_aliases":[],"settle_ms":100,"terminal":{"columns":80,"rows":24,"scrollback":1000},"timeout_ms":30000,"working_directory":"/tmp"}],"properties":{"approved":{"const":true,"description":"Explicit per-call acknowledgement that this operation launches the target","type":"boolean"},"arguments":{"default":[],"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"checkpoints":{"default":[],"description":"Value for checkpoints.","items":{"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"type":{"const":"time","description":"Value for type.","type":"string"}},"required":["type","at_ms"],"type":"object"},{"properties":{"occurrence":{"default":1,"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"type":{"const":"terminal_literal","description":"Value for type.","type":"string"},"value":{"description":"Value for value.","maxLength":10000,"minLength":1,"type":"string"}},"required":["type","value"],"type":"object"},{"properties":{"type":{"const":"root_exit","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"properties":{"type":{"const":"settled","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"}]}},"required":["name","trigger"],"type":"object"},"maxItems":64,"type":"array"},"command_shims":{"default":[],"description":"Value for command shims.","items":{"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","type":"string"},"routes":{"description":"Value for routes.","items":{"properties":{"arguments":{"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","exclusiveMinimum":0,"maximum":100,"type":"integer"},"outputs":{"default":[],"description":"Value for outputs.","items":{"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"stream":{"description":"Value for stream.","enum":["stdout","stderr"],"type":"string"}},"required":["at_ms","stream","data"],"type":"object"},"maxItems":1000,"type":"array"},"termination":{"description":"Value for termination.","oneOf":[{"properties":{"code":{"description":"Value for code.","maximum":255,"minimum":0,"type":"integer"},"type":{"const":"exit","description":"Value for type.","type":"string"}},"required":["type","code"],"type":"object"},{"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["type","signal"],"type":"object"}]}},"required":["arguments","termination"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["name","routes"],"type":"object"},"maxItems":32,"type":"array"},"environment":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for environment.","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"type":"object"},"events":{"default":[],"description":"Value for events.","items":{"oneOf":[{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","type":"string"},"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"type":{"const":"input","description":"Value for type.","type":"string"}},"required":["at_ms","type","data"],"type":"object"},{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["at_ms","type","columns","rows"],"type":"object"},{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["at_ms","type","signal"],"type":"object"}]},"maxItems":1000,"type":"array"},"executable":{"description":"Approved absolute path of the executable to run.","pattern":"^\\\\/.*","type":"string"},"filesystem_roots":{"default":[],"description":"Approved canonical filesystem filesystem roots.","items":{"pattern":"^\\\\/.*","type":"string"},"maxItems":16,"type":"array"},"idle_timeout_ms":{"default":30000,"description":"Value for idle timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"inherit_environment":{"default":[],"description":"Value for inherit environment.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"limits":{"default":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"connections":{"default":100,"description":"Value for connections.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"file_bytes":{"default":10000000,"description":"Bounded byte count for file.","exclusiveMinimum":0,"maximum":100000000,"type":"integer"},"files":{"default":10000,"description":"Value for files.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"filesystem_depth":{"default":16,"description":"Value for filesystem depth.","maximum":64,"minimum":1,"type":"integer"},"frames":{"default":10000,"description":"Value for frames.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"output_bytes":{"default":1000000,"description":"Bounded byte count for output.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"processes":{"default":1000,"description":"Value for processes.","exclusiveMinimum":0,"maximum":10000,"type":"integer"},"protocol_body_bytes":{"default":1000000,"description":"Bounded byte count for protocol body.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"protocol_events":{"default":10000,"description":"Value for protocol events.","exclusiveMinimum":0,"maximum":100000,"type":"integer"}},"type":"object"},"network_access":{"const":"host","default":"host","description":"Value for network access.","type":"string"},"normalization":{"default":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"description":"Value for normalization.","properties":{"paths":{"default":true,"description":"Value for paths.","type":"boolean"},"patterns":{"default":[],"description":"Value for patterns.","items":{"properties":{"pattern":{"description":"Text or bounded pattern used to filter matching results.","maxLength":500,"type":"string"},"replacement":{"description":"Value for replacement.","maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"maxItems":32,"type":"array"},"pids":{"default":true,"description":"Value for pids.","type":"boolean"},"ports":{"default":true,"description":"Value for ports.","type":"boolean"},"time_bucket_ms":{"default":10,"description":"Value for time bucket ms.","exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"type":"object"},"reactive":{"anyOf":[{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_visits":{"description":"Maximum permitted visits for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"on":{"description":"Value for on.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"sensitive":{"description":"Value for sensitive.","type":"boolean"},"type":{"const":"send_input","description":"Value for type.","type":"string"}},"required":["type","data","sensitive"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["type","columns","rows"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"close_stdin","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"root","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"process_group","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"subject_id","description":"Value for kind.","type":"string"},"subject_id":{"description":"Value for subject id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","subject_id"],"type":"object"}]},"type":{"const":"send_signal","description":"Value for type.","type":"string"}},"required":["type","target","signal"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"type":{"const":"checkpoint","description":"Value for type.","type":"string"}},"required":["type","name"],"type":"object"}]},"maxItems":16,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"priority":{"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"goto","description":"Value for kind.","type":"string"},"state":{"description":"Value for state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","state"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finish","description":"Value for kind.","type":"string"},"outcome":{"const":"passed","description":"Value for outcome.","type":"string"}},"required":["kind","outcome"],"type":"object"}]},"when":{"$ref":"#/$defs/__schema0","description":"Value for when."}},"required":["id","priority","max_uses","when","actions","target"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["id","max_visits","deadline_ms","on"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","initial_state","deadline_ms","states"],"type":"object"},{"type":"null"}],"description":"Value for reactive."},"replay":{"description":"Value for replay.","properties":{"http":{"default":[],"description":"Value for http.","items":{"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"},"disconnect":{"default":false,"description":"Value for disconnect.","type":"boolean"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","maximum":100,"minimum":1,"type":"integer"},"method":{"description":"Value for method.","maxLength":16,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"request_body":{"description":"Value for request body.","maxLength":1000000,"type":"string"},"request_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for request headers.","propertyNames":{"type":"string"},"type":"object"},"response_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for response headers.","propertyNames":{"type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["method","path","status","body"],"type":"object"},"maxItems":100,"type":"array"},"machine":{"anyOf":[{"additionalProperties":false,"properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"},{"type":"null"}],"description":"Value for machine."},"websocket_connections":{"default":[],"description":"Value for websocket connections.","items":{"properties":{"disconnect_after":{"default":false,"description":"Value for disconnect after.","type":"boolean"},"messages":{"description":"Value for messages.","items":{"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"}},"required":["data"],"type":"object"},"maxItems":100,"type":"array"}},"required":["messages"],"type":"object"},"maxItems":100,"type":"array"},"websocket_messages":{"default":[],"description":"Value for websocket messages.","items":{"maxLength":1000000,"type":"string"},"maxItems":100,"type":"array"}},"type":"object"},"secret_aliases":{"default":[],"description":"Value for secret aliases.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"settle_ms":{"default":100,"description":"Value for settle ms.","maximum":10000,"minimum":0,"type":"integer"},"terminal":{"default":{"columns":80,"rows":24,"scrollback":1000},"description":"Value for terminal.","properties":{"columns":{"default":80,"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"default":24,"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"scrollback":{"default":1000,"description":"Value for scrollback.","maximum":10000,"minimum":0,"type":"integer"}},"type":"object"},"timeout_ms":{"default":30000,"description":"Value for timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture residuals durably","type":"boolean"},"working_directory":{"description":"Value for working directory.","pattern":"^\\\\/.*","type":"string"}},"required":["approved","executable","working_directory"],"type":"object"},"kind":"session","name":"capture_process_scenario","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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":{"maxLength":500,"type":"string"},"replacement":{"maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"type":"array"},"pids":{"type":"boolean"},"ports":{"type":"boolean"},"time_bucket_ms":{"exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"required":["paths","pids","ports","time_bucket_ms","patterns"],"type":"object"},"process_samples":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"command":{"type":"string"},"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"process_group_id":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"session_id":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["at_ms","pid","parent_pid","command","process_group_id","session_id"],"type":"object"},"type":"array"},"protocol_events":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"type":"string"},"direction":{"enum":["request","response","received","sent"],"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"enum":["matched","unmatched","script_exhausted","disconnected","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"},"path":{"anyOf":[{"type":"string"},{"type":"null"}]},"protocol":{"enum":["http","websocket"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","at_ms","protocol","direction","method","path","data","outcome"],"type":"object"},"type":"array"},"reactive_run":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"active_state":{"maxLength":64,"minLength":1,"type":"string"},"controls":{"default":[],"items":{"additionalProperties":false,"properties":{"after_capture_order":{"maximum":9007199254740991,"minimum":-1,"type":"integer"},"kind":{"enum":["state_deadline","scenario_deadline","target_lost","cancelled","cleanup_failed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","kind","after_capture_order"],"type":"object"},"type":"array"},"outcome":{"type":"null"},"status":{"const":"running","type":"string"},"transitions":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"type":"null"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"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"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"const":"passed","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"type":"null"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"}]},"maxItems":128,"type":"array"}},"required":["status","outcome","active_state","controls","transitions"],"type":"object"},{"additionalProperties":false,"properties":{"active_state":{"maxLength":64,"minLength":1,"type":"string"},"controls":{"default":[],"items":{"additionalProperties":false,"properties":{"after_capture_order":{"maximum":9007199254740991,"minimum":-1,"type":"integer"},"kind":{"enum":["state_deadline","scenario_deadline","target_lost","cancelled","cleanup_failed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","kind","after_capture_order"],"type":"object"},"type":"array"},"outcome":{"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"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"type":"null"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"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"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"const":"passed","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"type":"null"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"}]},"maxItems":128,"type":"array"}},"required":["status","outcome","active_state","controls","transitions"],"type":"object"}]},{"type":"null"}],"default":null},"rendered_frames":{"items":{"additionalProperties":false,"properties":{"active_buffer":{"enum":["normal","alternate"],"type":"string"},"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"cursor_x":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"cursor_y":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"lines":{"items":{"type":"string"},"type":"array"},"rows":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"serialized_state":{"type":"string"}},"required":["sequence","at_ms","columns","rows","cursor_x","cursor_y","active_buffer","lines","serialized_state"],"type":"object"},"type":"array"},"replay_transitions":{"default":[],"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sensitive_aliases":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","sensitive_aliases"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"additionalProperties":false,"properties":{"reason":{"type":"string"},"scope":{"enum":["terminal","interaction","exit","process","filesystem","protocol","shim","cleanup","network"],"type":"string"}},"required":["scope","reason"],"type":"object"},"type":"array"},"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_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"max_capture_age_ms":{"description":"Maximum permitted capture age ms for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"trace_spec":{"additionalProperties":false,"description":"Value for trace spec.","properties":{"events":{"description":"Value for events.","items":{"additionalProperties":false,"properties":{"cardinality":{"default":{"kind":"required"},"description":"Value for cardinality.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"required","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"optional","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"exact","description":"Value for kind.","type":"string"}},"required":["kind","count"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"range","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","maximum":10000,"minimum":0,"type":"integer"},"min":{"description":"Value for min.","maximum":10000,"minimum":0,"type":"integer"}},"required":["kind","min","max"],"type":"object"}]},"exact":{"$ref":"#/$defs/__schema0","description":"Value for exact."},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["id","source","exact"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"language":{"description":"Value for language.","oneOf":[{"additionalProperties":false,"properties":{"happens_before":{"default":[],"description":"Value for happens before.","items":{"additionalProperties":false,"properties":{"after":{"description":"The later or right-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"before":{"description":"The earlier or left-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["before","after"],"type":"object"},"maxItems":4096,"type":"array"},"kind":{"const":"partial_order","description":"Value for kind.","type":"string"},"not_before":{"default":[],"description":"Value for not before.","items":{"additionalProperties":false,"properties":{"anchor":{"description":"Value for anchor.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"event":{"description":"Value for event.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["event","anchor"],"type":"object"},"maxItems":4096,"type":"array"},"prefix":{"default":[],"description":"Value for prefix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"suffix":{"default":[],"description":"Value for suffix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"unordered_groups":{"default":[],"description":"Value for unordered groups.","items":{"additionalProperties":false,"properties":{"events":{"description":"Value for events.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["events"],"type":"object"},"maxItems":256,"type":"array"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finite_traces","description":"Value for kind.","type":"string"},"variants":{"description":"Value for variants.","items":{"additionalProperties":false,"properties":{"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"trace":{"description":"Value for trace.","items":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"additionalProperties":false,"properties":{"unordered":{"description":"Value for unordered.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["unordered"],"type":"object"}]},"maxItems":4096,"type":"array"}},"required":["id","trace"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["kind","variants"],"type":"object"}]},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","events","language"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture disagreement durably","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"session","name":"compare_process_captures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"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","zip","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 two bounded sets of inventory_artifact Evidence pages by logical occurrence path, content identity, metadata, and graph relations. Pages must share and satisfy their graph commitment; every delta cites both sets, and gaps yield truncated or unknown, never equivalence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_ids":["ev_18e44ec411d51f15d5a51de8c35430c694ce1620137f851bd3ff8190cb4115f8"],"limit":100,"offset":0,"right_evidence_ids":["ev_1b6250b3a500efe9b47859506211ae63148043a7ced4b750a61d8bb1353b162d"]}],"properties":{"left_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the left observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the right observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record incomplete or differing evidence","type":"boolean"}},"required":["left_evidence_ids","right_evidence_ids"],"type":"object"},"kind":"session","name":"compare_artifacts","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","contradiction"],"type":"string"},"dimensions":{"items":{"enum":["content","kind","format","size","executable","relations","metadata","availability","integrity"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"right_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["classification","logical_path","dimensions","left_occurrence_id","right_occurrence_id","left_artifact_id","right_artifact_id","evidence_links"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"contradiction":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","added","removed","changed","unknown","contradiction"],"type":"object"}},"required":["status","left_manifest_id","right_manifest_id","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Compare Artifacts"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two explicit bounded sets of analyze_function Evidence pages across identity, exact provider text, calls, references, strings, and address-normalized CFG topology. Missing or provider-incompatible facets remain truncated or unknown; every conclusion cites both Evidence sets.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","right_evidence_id":"ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"}],"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"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","zip","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"},"maxItems":200,"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"},"maxItems":200,"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"},"maxItems":200,"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"},"maxItems":200,"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"},"maxItems":200,"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"},"maxItems":200,"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 v2 bundles by exact record membership, explicit one-to-one observation pairs, and complete residual-unknown revision histories. Missing bundle members describe omission only, never behavioral equivalence; output is digest-anchored and deterministically paginated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_bundle_path":"/approved/left-evidence.json","limit":100,"offset":0,"record_pairs":[],"right_bundle_path":"/approved/right-evidence.json"}],"properties":{"left_bundle_path":{"description":"Local filesystem path for left bundle.","maxLength":4096,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"record_pairs":{"default":[],"description":"Value for record pairs.","items":{"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"right_bundle_path":{"description":"Local filesystem path for right bundle.","maxLength":4096,"minLength":1,"type":"string"}},"required":["left_bundle_path","right_bundle_path"],"type":"object"},"kind":"session","name":"compare_bundles","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","history_advanced","history_diverged"],"type":"string"},"conclusion_kind":{"enum":["observed_change","contradiction","unresolved_branch"],"type":"string"},"entity":{"enum":["evidence","residual_unknown"],"type":"string"},"key":{"minLength":1,"type":"string"},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["entity","key","classification","conclusion_kind","left_evidence_ids","right_evidence_ids","left_digest","right_digest","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","changed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"records_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_advanced":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_diverged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["records_unchanged","records_added","records_removed","records_changed","unknowns_unchanged","unknowns_added","unknowns_removed","unknowns_advanced","unknowns_diverged","unresolved"],"type":"object"}},"required":["status","left_bundle_sha256","right_bundle_sha256","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Compare Bundles"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Aggregate validated comparison Evidence, or automatically run and resume a persistent cross-version artifact investigation beneath an approved evidence root. Runtime observations remain distinct from static behavior candidates; missing or incomplete comparisons produce unresolved findings, never causal claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_3166008558e2e0e42dcac98687ea05f288a8261022adc9c0166f733be74ac5f9","evidence_links":["ev_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","right_evidence_id":"ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"subject":null}],"limit":100,"offset":0}],"properties":{"comparisons":{"default":[],"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"investigation_run":{"anyOf":[{"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_workspace_revision":{"description":"Expected workspace revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"left_path":{"description":"Local filesystem path for left.","maxLength":4096,"minLength":1,"type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"options":{"default":{"change_limit":500,"max_compression_ratio":1000,"max_depth":20,"max_entries":10000,"max_entry_bytes":268435456,"max_path_bytes":4096,"max_total_bytes":1073741824,"page_size":500},"description":"Value for options.","properties":{"change_limit":{"default":500,"description":"Maximum number of change entries to return.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"page_size":{"default":500,"description":"Value for page size.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"replay_run_id":{"description":"Value for replay run id.","pattern":"^run_[a-f0-9]{64}$","type":"string"},"right_path":{"description":"Local filesystem path for right.","maxLength":4096,"minLength":1,"type":"string"},"workspace_name":{"default":"default","description":"Value for workspace name.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","left_path","right_path"],"type":"object"},{"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_workspace_revision":{"description":"Expected workspace revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"left_path":{"description":"Local filesystem path for left.","maxLength":4096,"minLength":1,"type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"options":{"default":{"change_limit":500,"max_compression_ratio":1000,"max_depth":20,"max_entries":10000,"max_entry_bytes":268435456,"max_path_bytes":4096,"max_total_bytes":1073741824,"page_size":500},"description":"Value for options.","properties":{"change_limit":{"default":500,"description":"Maximum number of change entries to return.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"page_size":{"default":500,"description":"Value for page size.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"replay_run_id":{"description":"Value for replay run id.","pattern":"^run_[a-f0-9]{64}$","type":"string"},"right_path":{"description":"Local filesystem path for right.","maxLength":4096,"minLength":1,"type":"string"},"workspace_name":{"default":"default","description":"Value for workspace name.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","left_path","right_path","integrity_policy","integrity_continue_approved"],"type":"object"}],"description":"Value for investigation run."},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"type":"object"},"kind":"session","name":"find_changed_behavior","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"maxItems":20100,"minItems":3,"type":"array"},"findings":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["observed_change","derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"scope":{"enum":["runtime","protocol","resource","static_candidate"],"type":"string"},"source_comparison_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["scope","dimension","classification","status","source_comparison_id","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"investigation_run":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"inventory_evidence_count":{"maximum":200,"minimum":2,"type":"integer"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"run_id":{"pattern":"^run_[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"workspace_id":{"pattern":"^ws_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","workspace_id","run_id","left_manifest_id","right_manifest_id","inventory_evidence_count","comparison_evidence_id","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observed_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["observed_changes","static_candidates","contradictions","unresolved"],"type":"object"}},"required":["behavior_status","summary","findings","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","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/v2","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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["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":"^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":"^0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["functions","start","goal"],"type":"object"},"kind":"session","name":"build_call_path","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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":"^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":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"target":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"}},"required":["source","target","evidence_links"],"type":"object"},"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":"^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":"^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":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"prefixItems":[],"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":true,"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^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":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"prefixItems":[],"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":false,"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^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 explicit caller-declared hypotheses between exact static comparison findings and runtime comparison dimensions. Similar names or paths are never auto-matched, consistent cochange never proves causality, and unknown or truncated inputs remain unresolved.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"mappings":[{"hypothesis":{"expected_pattern":"static_only","statement":"Static implementation changed without terminal change."},"runtime":{"comparison_evidence_id":"ev_d500bc6f4b82dd9fa7c7d6e970c95bfa980a13ce3c031932bfc0bc8a8f042060","dimension":"terminal"},"side_alignment":"left_to_left","static":{"comparison_evidence_id":"ev_3166008558e2e0e42dcac98687ea05f288a8261022adc9c0166f733be74ac5f9","selector":{"dimension":"pseudocode","kind":"function"}}}],"offset":0,"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_3166008558e2e0e42dcac98687ea05f288a8261022adc9c0166f733be74ac5f9","evidence_links":["ev_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"],"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_9fd1a430c60ccb122b772ace0863a8228075de790eb4c16bc067f1ab43e6b9e9","right_evidence_id":"ev_af38bdd427845fa566b35cea97a1d1471a3ef9c0f25114fae12c1a3f5350288b"},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"subject":null}]}],"properties":{"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mappings":{"description":"Value for mappings.","items":{"additionalProperties":false,"properties":{"hypothesis":{"additionalProperties":false,"description":"Value for hypothesis.","properties":{"expected_pattern":{"description":"Expected pattern used to reject stale or mismatched input.","enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"description":"Value for statement.","maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"runtime":{"additionalProperties":false,"description":"Value for runtime.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"}},"required":["comparison_evidence_id","dimension"],"type":"object"},"side_alignment":{"description":"Value for side alignment.","enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"description":"Value for static.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"selector":{"description":"Value for selector.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","description":"Value for kind.","type":"string"},"logical_path":{"description":"Local filesystem path for logical.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"description":"Value for dimension.","enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","dimension"],"type":"object"}]}},"required":["comparison_evidence_id","selector"],"type":"object"}},"required":["static","runtime","side_alignment","hypothesis"],"type":"object"},"maxItems":500,"minItems":1,"type":"array"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_comparisons":{"description":"Value for runtime comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"static_comparisons":{"description":"Value for static comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"}},"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 v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["static_comparisons","runtime_comparisons","mappings"],"type":"object"},"kind":"session","name":"correlate_static_and_runtime","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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"},"maxItems":20100,"minItems":2,"type":"array"},"hypothesis":{"additionalProperties":false,"properties":{"expected_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged","unknown","truncated"],"type":"string"},"runtime":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","dimension","status"],"type":"object"},"side_alignment":{"enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"selector":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","type":"string"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","dimension"],"type":"object"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","selector","status","conclusion_kind"],"type":"object"}},"required":["correlation_id","static","runtime","side_alignment","hypothesis","observed_pattern","classification","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":2,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"status":{"enum":["correlated","contradicted","unknown","truncated"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hypotheses":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["hypotheses","contradictions","unresolved"],"type":"object"}},"required":["status","summary","correlations","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Correlate Static And Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Verify a finite typed behavioral and structural specification against a canonical Evidence bundle. Pass means every declared claim has complete comparable authority—not global source equivalence; changed claims fail and missing, limited, or unresolved evidence stays unknown.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0,"specification":{"claims":[{"claim_id":"terminal-output","comparison_evidence_id":"ev_d500bc6f4b82dd9fa7c7d6e970c95bfa980a13ce3c031932bfc0bc8a8f042060","dimension":"terminal","kind":"behavioral","title":"Terminal output remains equivalent"}],"name":"Terminal compatibility"}}],"properties":{"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["workspace_id","revision","revision_sha256","boundary_id"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"specification":{"description":"Value for specification.","properties":{"claims":{"description":"Value for claims.","items":{"oneOf":[{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"kind":{"const":"behavioral","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"structural-function","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"const":"overall","description":"Value for dimension.","type":"string"},"kind":{"const":"structural-artifact","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"}]},"maxItems":100,"minItems":1,"type":"array"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"}},"required":["name","claims"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["specification"],"type":"object"},"kind":"session","name":"verify_reconstruction","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$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","zip","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._-]{0,99}$","type":"string"},"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"kind":{"enum":["behavioral","structural-function","structural-artifact"],"type":"string"},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["claim_id","kind","dimension","status","observed_status","comparison_evidence_id","left_evidence_ids","right_evidence_ids","evidence_links","unknown_ids","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"claim_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["operation","rationale","claim_ids","unknown_ids"],"type":"object"},"maxItems":2000,"type":"array"},"specification_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"behavioral":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"failed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","passed","failed","unknown","behavioral","structural"],"type":"object"}},"required":["status","specification_sha256","summary","claims","recommended_probes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"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. Requires approved: true, validates all evidence and relationship references, and rejects duplicate stable identity.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"contradicting_evidence_ids":[],"domain":"protocol","question":"Does this branch require an unavailable external service?","recommended_probes":[{"operation":"capture_process_scenario","rationale":"Replay branch."}],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"severity":"medium","supporting_evidence_ids":[]}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"supporting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["question","severity","domain","required_authority","required_confidence","required_environment","recommended_probes","relationships","approved"],"type":"object"},"kind":"session","name":"record_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Record Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Append one immutable full-state revision and mutation evidence. Requires approved: true and exact expected_revision; stale concurrent writers fail instead of overwriting newer analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"contradicting_evidence_ids":[],"expected_revision":1,"recommended_probes":[],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"resolution":null,"severity":"medium","status":"investigating","supporting_evidence_ids":[],"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_revision":{"description":"Expected revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id","expected_revision","approved","status","severity","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution"],"type":"object"},"kind":"session","name":"update_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Update Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Revalidate the current residual-unknown head against live bundled evidence, exact authority/confidence/environment requirements, and revision integrity. Withdrawn and out-of-scope dispositions are not truth claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id"],"type":"object"},"kind":"session","name":"verify_unknown_resolution","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"truthVerified":{"type":"boolean"},"unknown":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"valid":{"type":"boolean"}},"required":["valid","truthVerified","unknown"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Verify Unknown Resolution"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Evaluate ordered HTTP and WebSocket events directly against one validated finite replay machine without opening sockets or launching a target. Returns every decision, a capture-value-free transition journal, one redacted action table entry per used transition, captured aliases, final state, and exact configured and consumed limits.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"events":[{"at_ms":0,"body":"{\\"token\\":\\"opaque\\"}","connection":"not_applicable","headers":{},"method":"POST","path":"/callback","protocol":"http"}],"machine":{"initial_state":"waiting","limits":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"max_transitions":1,"states":[{"max_visits":100000,"name":"waiting","terminal":false},{"max_visits":100000,"name":"complete","terminal":true}],"transitions":[{"actions":[{"body":"","headers":{},"status":204,"type":"http_response"}],"captures":[{"sensitive":true,"value":{"path":["token"],"source":"request_json"},"variable":"token"}],"from":"waiting","guards":[],"id":"accept_callback","max_uses":1,"priority":100,"to":"complete","trigger":{"body":null,"headers":{},"method":"POST","path":"/callback","protocol":"http"}}]}}],"properties":{"events":{"description":"Value for events.","items":{"oneOf":[{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"const":"not_applicable","description":"Value for connection.","type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"}]},"maxItems":10000,"type":"array"},"machine":{"additionalProperties":false,"description":"Value for machine.","properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"}},"required":["machine","events"],"type":"object"},"kind":"session","name":"run_replay_machine","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"decisions":{"items":{"additionalProperties":false,"properties":{"event_sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outcome":{"anyOf":[{"const":"matched","type":"string"},{"enum":["unmatched","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"}]},"transition_sequence":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["event_sequence","outcome","transition_sequence"],"type":"object"},"maxItems":10000,"type":"array"},"final_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"initial_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"properties":{"configured":{"additionalProperties":false,"properties":{"bytes":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"connections":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"duration_ms":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"messages":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"transitions":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["transitions","connections","messages","bytes","duration_ms"],"type":"object"},"usage":{"additionalProperties":false,"properties":{"admitted_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"last_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"messages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offered_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"transitions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offered_events","admitted_events","transitions","connections","messages","bytes","last_at_ms"],"type":"object"}},"required":["configured","usage"],"type":"object"},"terminal":{"type":"boolean"},"transition_actions":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"type":"string"},"propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","type":"string"}},"required":["type","status","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"type":"array"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["transition_id","actions"],"type":"object"},"maxItems":2000,"type":"array"},"transition_journal":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"captured_aliases":{"items":{"additionalProperties":false,"properties":{"name":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"sensitive":{"type":"boolean"}},"required":["name","sensitive"],"type":"object"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"state_before":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","captured_aliases"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["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","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","zip","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","zip","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"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"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":"Compose the selected document, current address, and containing/current procedure into one provider-neutral result. The result reflects sequential provider observations, not an atomic cursor snapshot; a cursor outside any procedure returns procedure: null. Scalar navigation getters remain available for evaluation and compatibility.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"get_navigation_context","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"document":{"type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["document","address","procedure"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Get Navigation Context"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one explicit reproducible address for its analyzed name, containing procedure, regular and inline comments, and matching bookmarks. Each unsupported facet returns a typed unavailable outcome; xrefs, assembly, and pseudocode remain separate bounded follow-ups.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"required":["address"],"type":"object"},"kind":"session","name":"inspect_address_context","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"bookmarks":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"document":{"anyOf":[{"type":"string"},{"type":"null"}]},"inline_comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"name":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"procedure":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]}},"required":["address","document","name","procedure","comment","inline_comment","bookmarks"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Inspect Address Context"}]}'; const generatedPayload: unknown = JSON.parse(GENERATED_PAYLOAD_JSON); if (!isGeneratedPayload(generatedPayload)) throw new TypeError("Generated MCP catalog payload is invalid"); diff --git a/src/ghidra/GhidraAnalysisProfile.ts b/src/ghidra/GhidraAnalysisProfile.ts index 92b558b056..7a005cc8a6 100644 --- a/src/ghidra/GhidraAnalysisProfile.ts +++ b/src/ghidra/GhidraAnalysisProfile.ts @@ -35,7 +35,7 @@ export const resolveGhidraAnalysisProfile = ( const provider = { ...identity, version: installation.providerVersion }; return Promise.resolve( ok({ - profile: createAnalysisProfile(provider, 1, { + profile: createAnalysisProfile(provider, { target_kind: target.kind, target_format: target.format, architecture: target.architecture ?? null, diff --git a/src/ghidra/GhidraClient.ts b/src/ghidra/GhidraClient.ts index 60680916f7..f8b1e011f7 100644 --- a/src/ghidra/GhidraClient.ts +++ b/src/ghidra/GhidraClient.ts @@ -17,7 +17,6 @@ import { } from "../process/ProviderProcess.js"; import { GHIDRA_MAX_LINE_BYTES, - GHIDRA_MAX_QUEUED_REQUESTS, GHIDRA_REQUEST_TIMEOUT_MS, GHIDRA_STARTUP_TIMEOUT_MS, } from "./GhidraDefaults.js"; @@ -138,7 +137,6 @@ export class GhidraClient { failure: this.#failure, }); this.#requestQueue = new GhidraRequestQueue( - GHIDRA_MAX_QUEUED_REQUESTS, (method, parameters, requestOptions) => this.#wire.request(method, parameters, requestOptions), (kind, message, timeoutMs) => diff --git a/src/ghidra/GhidraDefaults.ts b/src/ghidra/GhidraDefaults.ts index 1fa18e8bda..2a5a9d4e69 100644 --- a/src/ghidra/GhidraDefaults.ts +++ b/src/ghidra/GhidraDefaults.ts @@ -12,8 +12,6 @@ export const GHIDRA_REQUEST_TIMEOUT_MS = 10_000; export const GHIDRA_DECOMPILE_TIMEOUT_SECONDS = 30; /** Socket deadline leaves bounded time to project a native decompiler timeout. */ export const GHIDRA_DECOMPILE_REQUEST_TIMEOUT_MS = 35_000; -/** Maximum active plus queued calls for one serial headless Program. */ -export const GHIDRA_MAX_QUEUED_REQUESTS = 32; /** Maximum encoded response line accepted from the Java bridge. */ export const GHIDRA_MAX_LINE_BYTES = 1024 * 1024; /** Version of REA's Java bridge handshake and request protocol. */ diff --git a/src/ghidra/GhidraFunctionValues.test.ts b/src/ghidra/GhidraFunctionValues.test.ts index 01ed6dd60b..6b4be88865 100644 --- a/src/ghidra/GhidraFunctionValues.test.ts +++ b/src/ghidra/GhidraFunctionValues.test.ts @@ -9,7 +9,6 @@ import { type GhidraFunctionOperation, } from "./GhidraFunctionValues.js"; import { - ghidraBounded, ghidraFunctionClassification, ghidraFunctionDossier, ghidraFunctionIdentity, @@ -18,7 +17,7 @@ import { } from "../domain/hopperValues.fixture.js"; describe("Ghidra function-analysis boundary values", () => { - it("defaults bounded inputs and rejects undeclared or implicit addresses", () => { + it("defaults inputs and rejects undeclared or implicit addresses", () => { expect( parseGhidraFunctionInput("procedure_info", { procedure: "main" }), ).toEqual({ @@ -33,25 +32,13 @@ describe("Ghidra function-analysis boundary values", () => { document: null, procedure: "main", direction: "outgoing", - offset: 0, - limit: 100, - max_instructions: 500, }, }); expect( parseGhidraFunctionInput("analyze_function", { procedure: "main" }), ).toMatchObject({ ok: true, - value: { - procedure: "main", - include_assembly: false, - limit: 100, - max_pseudocode_chars: 20_000, - max_instructions: 500, - pseudocode_offset: 0, - assembly_offset: 0, - collection_offset: { basic_blocks: 0, outgoing_references: 0 }, - }, + value: { procedure: "main" }, }); expect( parseGhidraFunctionInput("read_function_instructions", { @@ -59,12 +46,7 @@ describe("Ghidra function-analysis boundary values", () => { }), ).toEqual({ ok: true, - value: { - document: null, - procedure: "main", - offset: 0, - limit: 64, - }, + value: { document: null, procedure: "main" }, }); expect(parseGhidraFunctionInput("xrefs", {})).toMatchObject({ ok: false, @@ -93,9 +75,7 @@ describe("Ghidra function-analysis result values", () => { expect( parseGhidraFunctionResult("read_function_instructions", { procedure: ghidraFunctionIdentity(), - instructions: ghidraBounded(["0x401000: push rbp"]), - instructions_scanned: 1, - instruction_scan_truncated: false, + instructions: ["0x401000: push rbp"], limitations: ["Ghidra-specific instruction text."], }), ).toMatchObject({ ok: true }); @@ -105,9 +85,7 @@ describe("Ghidra function-analysis result values", () => { ...ghidraFunctionIdentity(), address: "0X401000", }, - instructions: ghidraBounded(["0x401000: push rbp"]), - instructions_scanned: 1, - instruction_scan_truncated: false, + instructions: ["0x401000: push rbp"], limitations: ["Ghidra-specific instruction text."], }), ).toMatchObject({ @@ -134,24 +112,20 @@ describe("Ghidra function-analysis result values", () => { parseGhidraFunctionResult("procedure_references", { procedure: ghidraFunctionIdentity(), direction: "outgoing", - references: ghidraBounded([ghidraReferenceEdge()]), - instructions_scanned: 2, - instruction_scan_truncated: false, + references: [ghidraReferenceEdge()], }), ).toMatchObject({ ok: true, value: { - references: { - items: [ - { - kind: { - available: true, - provenance: "ghidra-reference-manager", - data: true, - }, + references: [ + { + kind: { + available: true, + provenance: "ghidra-reference-manager", + data: true, }, - ], - }, + }, + ], }, }); expect( @@ -230,11 +204,9 @@ const malformedOutputs = (): Array< { procedure: ghidraFunctionIdentity(), direction: "outgoing", - references: ghidraBounded([ + references: [ { ...edge, kind: { available: false, reason: "unknown" } }, - ]), - instructions_scanned: 1, - instruction_scan_truncated: false, + ], }, ], [ diff --git a/src/ghidra/GhidraFunctionValues.ts b/src/ghidra/GhidraFunctionValues.ts index 4905374fe6..4eb9c30b10 100644 --- a/src/ghidra/GhidraFunctionValues.ts +++ b/src/ghidra/GhidraFunctionValues.ts @@ -10,7 +10,7 @@ import type { JsonValue } from "../domain/jsonValue.js"; import { nativeApiBoundarySchema } from "../domain/nativeApiBoundary.js"; import { err, ok, type Result } from "../domain/result.js"; import { - ghidraBoundedIdentifierSchema, + ghidraIdentifierSchema, ghidraCanonicalAddressSchema, } from "./GhidraInventoryValues.js"; @@ -38,69 +38,22 @@ export const isGhidraFunctionOperation = ( operation: string, ): operation is GhidraFunctionOperation => operationSet.has(operation); -const document = ghidraBoundedIdentifierSchema.nullable().default(null); -const procedure = ghidraBoundedIdentifierSchema; +const document = ghidraIdentifierSchema.nullable().default(null); +const procedure = ghidraIdentifierSchema; const directProcedure = { document, procedure }; -const collectionOffsets = z - .object({ - comments: z.number().int().min(0).default(0), - callers: z.number().int().min(0).default(0), - callees: z.number().int().min(0).default(0), - incoming_references: z.number().int().min(0).default(0), - outgoing_references: z.number().int().min(0).default(0), - referenced_strings: z.number().int().min(0).default(0), - referenced_names: z.number().int().min(0).default(0), - basic_blocks: z.number().int().min(0).default(0), - }) - .strict() - .default({ - comments: 0, - callers: 0, - callees: 0, - incoming_references: 0, - outgoing_references: 0, - referenced_strings: 0, - referenced_names: 0, - basic_blocks: 0, - }); const inputSchemas = { - analyze_function: z - .object({ - procedure, - include_assembly: z.boolean().default(false), - limit: z.number().int().min(1).max(500).default(100), - max_pseudocode_chars: z - .number() - .int() - .min(1) - .max(100_000) - .default(20_000), - max_instructions: z.number().int().min(1).max(5_000).default(500), - pseudocode_offset: z.number().int().min(0).default(0), - assembly_offset: z.number().int().min(0).default(0), - collection_offset: collectionOffsets, - }) - .strict(), + analyze_function: z.object({ procedure }).strict(), procedure_assembly: z.object(directProcedure).strict(), procedure_callees: z.object(directProcedure).strict(), procedure_callers: z.object(directProcedure).strict(), procedure_info: z.object(directProcedure).strict(), procedure_pseudo_code: z.object(directProcedure).strict(), - read_function_instructions: z - .object({ - ...directProcedure, - offset: z.number().int().min(0).max(100_000).default(0), - limit: z.number().int().min(1).max(500).default(64), - }) - .strict(), + read_function_instructions: z.object(directProcedure).strict(), procedure_references: z .object({ ...directProcedure, direction: z.enum(["incoming", "outgoing"]).default("outgoing"), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(500).default(100), - max_instructions: z.number().int().min(1).max(5_000).default(500), }) .strict(), xrefs: z.object({ document, address: ghidraCanonicalAddressSchema }).strict(), @@ -167,45 +120,11 @@ const referenceEdge = z kind: referenceKind, }) .strict(); -const boundedReferenceFacts = { - items: z.array(referenceEdge), - total: z.number().int().min(0).nullable(), - returned: z.number().int().min(0), -} as const; -const boundedReferences = z - .discriminatedUnion("truncated", [ - z.strictObject({ - ...boundedReferenceFacts, - truncated: z.literal(false), - next_offset: z.null(), - }), - z.strictObject({ - ...boundedReferenceFacts, - truncated: z.literal(true), - next_offset: z.number().int().min(0).nullable(), - }), - ]) - .superRefine((value, context) => { - if (value.returned !== value.items.length) - context.addIssue({ - code: "custom", - path: ["returned"], - message: "returned must equal the number of reference items", - }); - if (value.total !== null && value.total < value.returned) - context.addIssue({ - code: "custom", - path: ["total"], - message: "total cannot be smaller than returned", - }); - }); const procedureReferences = z .object({ procedure: procedureIdentity, direction: z.enum(["incoming", "outgoing"]), - references: boundedReferences, - instructions_scanned: z.number().int().min(0), - instruction_scan_truncated: z.boolean(), + references: z.array(referenceEdge), }) .strict(); const procedureInfo = z @@ -256,19 +175,20 @@ const ghidraFunctionDossier = functionDossierSchema .superRefine((value, context) => { const addresses = [ value.procedure.address, - ...value.comments.items.map(({ address }) => address), - ...value.callers.items.map(({ address }) => address), - ...value.callees.items.map(({ address }) => address), - ...value.incoming_references.items.flatMap(referenceAddresses), - ...value.outgoing_references.items.flatMap(referenceAddresses), - ...value.referenced_strings.items.flatMap( - ({ address, source_address }) => [address, source_address], - ), - ...value.referenced_names.items.flatMap(({ address, source_address }) => [ + ...value.comments.map(({ address }) => address), + ...value.callers.map(({ address }) => address), + ...value.callees.map(({ address }) => address), + ...value.incoming_references.flatMap(referenceAddresses), + ...value.outgoing_references.flatMap(referenceAddresses), + ...value.referenced_strings.flatMap(({ address, source_address }) => [ address, source_address, ]), - ...value.basic_blocks.items.flatMap(({ start, end, successors }) => [ + ...value.referenced_names.flatMap(({ address, source_address }) => [ + address, + source_address, + ]), + ...value.basic_blocks.flatMap(({ start, end, successors }) => [ start, end, ...successors, @@ -285,10 +205,10 @@ const ghidraFunctionDossier = functionDossierSchema }); const identities = [ value.procedure, - ...value.callers.items, - ...value.callees.items, - ...value.incoming_references.items.flatMap(referenceProcedures), - ...value.outgoing_references.items.flatMap(referenceProcedures), + ...value.callers, + ...value.callees, + ...value.incoming_references.flatMap(referenceProcedures), + ...value.outgoing_references.flatMap(referenceProcedures), ]; if ( identities.some( @@ -303,10 +223,9 @@ const ghidraFunctionDossier = functionDossierSchema value.procedure.locals.some( (variable) => !localVariable.safeParse(variable).success, ) || - [ - ...value.incoming_references.items, - ...value.outgoing_references.items, - ].some(({ kind }) => !referenceKind.safeParse(kind).success) + [...value.incoming_references, ...value.outgoing_references].some( + ({ kind }) => !referenceKind.safeParse(kind).success, + ) ) context.addIssue({ code: "custom", @@ -355,7 +274,7 @@ export const parseGhidraFunctionResult = ( }; const referenceAddresses = ( - edge: FunctionDossier["incoming_references"]["items"][number], + edge: FunctionDossier["incoming_references"][number], ): readonly string[] => [ edge.source_address, edge.target_address, @@ -364,9 +283,9 @@ const referenceAddresses = ( ]; const referenceProcedures = ( - edge: FunctionDossier["incoming_references"]["items"][number], + edge: FunctionDossier["incoming_references"][number], ): readonly NonNullable< - FunctionDossier["incoming_references"]["items"][number]["source_procedure"] + FunctionDossier["incoming_references"][number]["source_procedure"] >[] => [ ...(edge.source_procedure === null ? [] : [edge.source_procedure]), ...(edge.target_procedure === null ? [] : [edge.target_procedure]), diff --git a/src/ghidra/GhidraInventoryValues.test.ts b/src/ghidra/GhidraInventoryValues.test.ts index 9a76de60c0..625a7e2b90 100644 --- a/src/ghidra/GhidraInventoryValues.test.ts +++ b/src/ghidra/GhidraInventoryValues.test.ts @@ -5,15 +5,13 @@ import { isGhidraInventoryOperation, parseGhidraInventoryInput, parseGhidraInventoryResult, - type GhidraInventoryOperation, } from "./GhidraInventoryValues.js"; -import type { JsonValue } from "../domain/jsonValue.js"; describe("Ghidra inventory boundary values", () => { - it("defaults bounded provider inputs without accepting undeclared fields", () => { + it("accepts complete inventories and searches without page controls", () => { expect(parseGhidraInventoryInput("list_procedures", {})).toEqual({ ok: true, - value: { document: null, offset: 0, limit: 100 }, + value: { document: null }, }); expect( parseGhidraInventoryInput("search_strings", { pattern: "needle" }), @@ -23,26 +21,15 @@ describe("Ghidra inventory boundary values", () => { pattern: "needle", mode: "literal", case_sensitive: false, - offset: 0, - limit: 100, document: null, }, }); + expect( + parseGhidraInventoryInput("list_procedures", { limit: 100 }), + ).toMatchObject({ ok: false, error: { _tag: "AnalysisInputError" } }); expect( parseGhidraInventoryInput("list_documents", { extra: true }), ).toMatchObject({ ok: false, error: { _tag: "AnalysisInputError" } }); - expect(parseGhidraInventoryInput("address_name", {})).toMatchObject({ - ok: false, - error: { _tag: "AnalysisInputError" }, - }); - expect( - parseGhidraInventoryInput("procedure_address", { - procedure: "x".repeat(4097), - }), - ).toMatchObject({ - ok: false, - error: { _tag: "AnalysisInputError" }, - }); }); it("keeps the admitted operation set closed", () => { @@ -52,181 +39,30 @@ describe("Ghidra inventory boundary values", () => { expect(isGhidraInventoryOperation("set_comment")).toBe(false); }); - it("parses primary, dynamic, and external symbol facts", () => { - const items = [ - { - address: "EXTERNAL:0x1", - value: "libc::puts", - value_truncated: false, - symbol: { - primary: true, - dynamic: false, - external: true, - type: "function", - source: "imported", - }, - }, - { - address: "0x401000", - value: "LAB_00401000", - value_truncated: false, - symbol: { - primary: true, - dynamic: true, - external: false, - type: "label", - source: "default", - }, - }, - ] satisfies readonly JsonValue[]; - expect(parseGhidraInventoryResult("list_names", page(items))).toEqual({ + it("returns complete typed inventory arrays", () => { + const procedures = Array.from({ length: 700 }, (_, index) => ({ + address: `0x${(0x401000 + index).toString(16)}`, + value: `sub_${index}`, + procedure: { external: false, thunk: false, thunk_target: null }, + })); + expect(parseGhidraInventoryResult("list_procedures", procedures)).toEqual({ ok: true, - value: page(items), + value: procedures, }); }); - it("parses thunk, string-layout, and memory-permission observations", () => { + it("rejects malformed inventory items", () => { expect( - parseGhidraInventoryResult( - "list_procedures", - page([ - { - address: "0x401020", - value: "puts", - value_truncated: false, - procedure: { - external: false, - thunk: true, - thunk_target: "EXTERNAL:0x1", - }, - }, - ]), - ), - ).toMatchObject({ ok: true }); - expect( - parseGhidraInventoryResult( - "list_strings", - page([ - { - address: "0x402000", - value: "fixture", - value_truncated: false, - string: { - encoding: "UTF-8", - termination: "missing", - byte_length: 7, - }, - }, - ]), - ), - ).toMatchObject({ ok: true }); - expect( - parseGhidraInventoryResult("list_segments", [ - { - name: ".text", - start: "0x401000", - end: "0x402000", - readable: true, - writable: false, - executable: true, - permissions: { available: true, source: "ghidra-memory-block" }, - provenance: "ghidra-memory-block", - address_space: "ram", - image_base: "0x400000", - initialized: true, - overlay: false, - sections: [], - }, - ]), - ).toMatchObject({ ok: true }); - }); - - it.each(malformedOutputs())( - "rejects malformed %s output", - (_name, operation, value) => { - expect(parseGhidraInventoryResult(operation, value)).toMatchObject({ - ok: false, - error: { _tag: "AnalysisOutputError" }, - }); - }, - ); -}); - -function malformedOutputs(): Array< - [string, GhidraInventoryOperation, JsonValue] -> { - return [ - [ - "non-canonical address", - "list_procedures", - page([ + parseGhidraInventoryResult("list_procedures", [ { address: "00401000", value: "main", - value_truncated: false, - procedure: { - external: false, - thunk: false, - thunk_target: null, - }, + procedure: { external: false, thunk: false, thunk_target: null }, }, ]), - ], - [ - "missing external metadata", - "list_names", - page([{ address: "0x401000", value: "main", value_truncated: false }]), - ], - [ - "contradictory continuation", - "search_strings", - { - ...page([]), - total: 1, - has_more: false, - next_offset: null, - }, - ], - [ - "non-advancing continuation", - "list_procedures", - { - ...page([]), - total: 1, - has_more: true, - next_offset: 0, - }, - ], - [ - "items beyond exact total", - "list_procedures", - { ...page([procedureItem()]), total: 0 }, - ], - ["provider limit", "search_procedures", { ...page([]), limit: 101 }], - ["multiple programs", "list_documents", ["first", "second"]], - ]; -} - -function procedureItem(): JsonValue { - return { - address: "0x401000", - value: "main", - value_truncated: false, - procedure: { - external: false, - thunk: false, - thunk_target: null, - }, - }; -} - -function page(items: readonly JsonValue[]) { - return { - items: [...items], - offset: 0, - limit: 500, - total: items.length, - next_offset: null, - has_more: false, - }; -} + ).toMatchObject({ ok: false, error: { _tag: "AnalysisOutputError" } }); + expect( + parseGhidraInventoryResult("search_strings", [{ address: "0x1000" }]), + ).toMatchObject({ ok: false, error: { _tag: "AnalysisOutputError" } }); + }); +}); diff --git a/src/ghidra/GhidraInventoryValues.ts b/src/ghidra/GhidraInventoryValues.ts index fdbafcc95a..991395bb3f 100644 --- a/src/ghidra/GhidraInventoryValues.ts +++ b/src/ghidra/GhidraInventoryValues.ts @@ -29,38 +29,26 @@ export const isGhidraInventoryOperation = ( operation: string, ): operation is GhidraInventoryOperation => operationSet.has(operation); -export const ghidraBoundedIdentifierSchema = z.string().min(1).max(4096); -const boundedIdentifier = ghidraBoundedIdentifierSchema; -const document = boundedIdentifier.nullable().default(null); -const explicitAddress = boundedIdentifier; +export const ghidraIdentifierSchema = z.string().min(1); +const identifier = ghidraIdentifierSchema; +const document = identifier.nullable().default(null); +const explicitAddress = identifier; const filteredAddress = explicitAddress.nullable().default(null); -const pagination = { - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(500).default(100), -}; const searchInput = { - pattern: z.string().min(1).max(256), + pattern: z.string().min(1), mode: z.enum(["literal", "regex"]).default("literal"), case_sensitive: z.boolean().default(false), - offset: z.number().int().min(0).default(0), - limit: z.number().int().min(1).max(100).default(100), document, }; const inputSchemas = { address_name: z.object({ document, address: explicitAddress }).strict(), list_documents: z.object({}).strict(), - list_names: z - .object({ document, address: filteredAddress, ...pagination }) - .strict(), - list_procedures: z.object({ document, ...pagination }).strict(), + list_names: z.object({ document, address: filteredAddress }).strict(), + list_procedures: z.object({ document }).strict(), list_segments: z.object({ document }).strict(), - list_strings: z - .object({ document, address: filteredAddress, ...pagination }) - .strict(), - procedure_address: z - .object({ document, procedure: boundedIdentifier }) - .strict(), + list_strings: z.object({ document, address: filteredAddress }).strict(), + procedure_address: z.object({ document, procedure: identifier }).strict(), resolve_containing_procedure: z .object({ document, address: explicitAddress }) .strict(), @@ -83,7 +71,6 @@ export const ghidraCanonicalAddressSchema = z .string() .regex(/^(?:0x[0-9a-f]+|(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:0x[0-9a-f]+)$/u); const canonicalAddress = ghidraCanonicalAddressSchema; -const valueTruncation = { value_truncated: z.boolean() }; const symbolFacts = z .object({ primary: z.boolean(), @@ -113,7 +100,6 @@ const stringFacts = z const baseItem = { address: canonicalAddress, value: z.string(), - ...valueTruncation, }; const symbolItem = z.object({ ...baseItem, symbol: symbolFacts }).strict(); const procedureItem = z @@ -122,65 +108,6 @@ const procedureItem = z const stringItem = z.object({ ...baseItem, string: stringFacts }).strict(); const searchItem = z.object(baseItem).strict(); -const pageSchema = ( - item: Item, - maximumLimit: number, -) => { - const pageFacts = { - items: z.array(item), - offset: z.number().int().min(0), - limit: z.number().int().min(1).max(maximumLimit), - total: z.number().int().min(0), - } as const; - return z - .discriminatedUnion("has_more", [ - z.strictObject({ - ...pageFacts, - has_more: z.literal(true), - next_offset: z.number().int().min(0), - }), - z.strictObject({ - ...pageFacts, - has_more: z.literal(false), - next_offset: z.null(), - }), - ]) - .superRefine((page, context) => { - const next = page.offset + page.items.length; - const hasMore = next < page.total; - if (page.items.length > page.limit) - context.addIssue({ - code: "custom", - path: ["items"], - message: "page exceeds its declared limit", - }); - if (page.items.length > 0 && next > page.total) - context.addIssue({ - code: "custom", - path: ["total"], - message: "page items exceed its exact total", - }); - if (hasMore && page.items.length === 0) - context.addIssue({ - code: "custom", - path: ["items"], - message: "page continuation must advance its offset", - }); - if (page.has_more !== hasMore) - context.addIssue({ - code: "custom", - path: ["has_more"], - message: "page continuation does not match its exact total", - }); - if (page.next_offset !== (hasMore ? next : null)) - context.addIssue({ - code: "custom", - path: ["next_offset"], - message: "page continuation offset is inconsistent", - }); - }); -}; - const availablePermissions = z .object({ available: z.literal(true), @@ -233,14 +160,14 @@ const containingProcedure = z.discriminatedUnion("found", [ const resultSchemas = { address_name: z.string().nullable(), list_documents: z.array(z.string().min(1)).length(1), - list_names: pageSchema(symbolItem, 500), - list_procedures: pageSchema(procedureItem, 500), + list_names: z.array(symbolItem), + list_procedures: z.array(procedureItem), list_segments: z.array(segment), - list_strings: pageSchema(stringItem, 500), + list_strings: z.array(stringItem), procedure_address: canonicalAddress, resolve_containing_procedure: containingProcedure, - search_procedures: pageSchema(searchItem, 100), - search_strings: pageSchema(searchItem, 100), + search_procedures: z.array(searchItem), + search_strings: z.array(searchItem), } satisfies Readonly>; /** Require exact, bounded Java-bridge output before creating Evidence. */ diff --git a/src/ghidra/GhidraProvider.behavior.test.ts b/src/ghidra/GhidraProvider.behavior.test.ts index 5faac24cb8..9bc797e678 100644 --- a/src/ghidra/GhidraProvider.behavior.test.ts +++ b/src/ghidra/GhidraProvider.behavior.test.ts @@ -65,23 +65,23 @@ describe("Ghidra provider", () => { expect.arrayContaining([ expect.objectContaining({ operation: "list_procedures", - pagination: "offset", + pagination: "none", effects: expect.objectContaining({ mutatesArtifact: false, mayShowUi: false, mayWriteFilesystem: true, }), limits: { - maxResults: 500, + maxResults: null, maxPayloadBytes: 1024 * 1024, timeoutMs: 10_000, }, }), expect.objectContaining({ operation: "analyze_function", - pagination: "offset", + pagination: "none", limits: { - maxResults: 500, + maxResults: null, maxPayloadBytes: 1024 * 1024, timeoutMs: 35_000, }, @@ -235,25 +235,17 @@ describe("Ghidra client projection", () => { ) => { toolCalls.push({ operation, input, options }); return Promise.resolve( - ok({ - items: [ - { - address: "0x1000", - value: "fixture_main", - value_truncated: false, - procedure: { - external: false, - thunk: false, - thunk_target: null, - }, + ok([ + { + address: "0x1000", + value: "fixture_main", + procedure: { + external: false, + thunk: false, + thunk_target: null, }, - ], - offset: 0, - limit: 100, - total: 1, - next_offset: null, - has_more: false, - }), + }, + ]), ); }; const clientFactory: GhidraProviderClientFactory = (options) => { @@ -276,7 +268,6 @@ describe("Ghidra client projection", () => { if (!resolved.ok || resolved.value.profile === null) return; expect(resolved.value.profile).toMatchObject({ provider: { id: "ghidra", name: "Ghidra", version: "12.1.2" }, - provider_profile_schema_version: 1, parameters: { import_mode: "ephemeral-read-only", analyzer_preset: "ghidra-default", @@ -303,7 +294,7 @@ describe("Ghidra client projection", () => { expect(toolCalls).toEqual([ { operation: "list_procedures", - input: { document: null, offset: 0, limit: 100 }, + input: { document: null }, options: {}, }, ]); @@ -316,13 +307,8 @@ describe("Ghidra client projection", () => { version: "12.1.2", }, analysisProfile: resolved.value.profile, - result: { - items: [{ address: "0x1000", value: "fixture_main" }], - total: 1, - }, - rawResult: { - items: [{ procedure: { external: false, thunk: false } }], - }, + result: [{ address: "0x1000", value: "fixture_main" }], + rawResult: [{ procedure: { external: false, thunk: false } }], }, }); expect(startCount).toBe(0); @@ -333,7 +319,7 @@ describe("Ghidra result projection", () => { it("rejects malformed inventory output before Evidence creation", async () => { const ghidra = provider(installationHost(), () => ({ start: () => Promise.resolve(ok(sessionInfo())), - callTool: () => Promise.resolve(ok({ items: "not-a-page" })), + callTool: () => Promise.resolve(ok({ items: "not-an-inventory" })), close: () => Promise.resolve(), })); const resolved = await ghidra.resolveAnalysisProfile( diff --git a/src/ghidra/GhidraProviderCapabilities.ts b/src/ghidra/GhidraProviderCapabilities.ts index e41e527e76..1cf13acd51 100644 --- a/src/ghidra/GhidraProviderCapabilities.ts +++ b/src/ghidra/GhidraProviderCapabilities.ts @@ -39,20 +39,7 @@ export const GHIDRA_PROVIDER_TOOL_CONTRACTS = Object.freeze( ), ); -const PAGINATED_OPERATIONS: ReadonlySet = new Set([ - "list_names", - "list_procedures", - "list_strings", - "search_procedures", - "search_strings", - "procedure_references", - "read_function_instructions", - "analyze_function", -]); -const SEARCH_OPERATIONS: ReadonlySet = new Set([ - "search_procedures", - "search_strings", -]); +const PAGINATED_OPERATIONS: ReadonlySet = new Set([]); const DECOMPILE_OPERATIONS: ReadonlySet = new Set([ "procedure_pseudo_code", "analyze_function", @@ -98,7 +85,6 @@ export const limitationsFor = (operation: string): readonly string[] => { return [ ...common, "Only Ghidra-defined string Data is observed; charset is reported, while a non-missing terminator cannot distinguish a present terminator from a fixed or Pascal layout.", - "Returned values are bounded to 1,024 Unicode code points and mark value_truncated instead of silently crossing the wire budget.", ]; case "list_segments": return [ @@ -169,8 +155,6 @@ export const CAPABILITIES: readonly CapabilityDescriptor[] = Object.freeze( return Object.freeze({ provider: GHIDRA_PROVIDER_IDENTITY, operation, - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: PAGINATED_OPERATIONS.has(contract.name) @@ -187,11 +171,7 @@ export const CAPABILITIES: readonly CapabilityDescriptor[] = Object.freeze( requiresRoot: false, }), limits: Object.freeze({ - maxResults: PAGINATED_OPERATIONS.has(contract.name) - ? SEARCH_OPERATIONS.has(contract.name) - ? 100 - : 500 - : null, + maxResults: PAGINATED_OPERATIONS.has(contract.name) ? 500 : null, maxPayloadBytes: GHIDRA_MAX_LINE_BYTES, timeoutMs: DECOMPILE_OPERATIONS.has(contract.name) ? GHIDRA_DECOMPILE_REQUEST_TIMEOUT_MS diff --git a/src/ghidra/GhidraRequestQueue.ts b/src/ghidra/GhidraRequestQueue.ts index d0a9fef1a2..273410a214 100644 --- a/src/ghidra/GhidraRequestQueue.ts +++ b/src/ghidra/GhidraRequestQueue.ts @@ -31,14 +31,12 @@ interface QueuedRequest { readonly onAbort: (() => void) | undefined; } -/** Bounded FIFO that admits one Ghidra Program request at a time. */ +/** FIFO that admits one Ghidra Program request at a time. */ export class GhidraRequestQueue { readonly #queue: QueuedRequest[] = []; #active = false; - #size = 0; constructor( - private readonly maximum: number, private readonly execute: GhidraRequestExecutor, private readonly failure: GhidraQueueFailureFactory, ) {} @@ -63,16 +61,6 @@ export class GhidraRequestQueue { ), ), ); - if (this.#size >= this.maximum) - return Promise.resolve( - err( - this.failure( - "protocol", - `Ghidra serial request queue reached its ${String(this.maximum)}-request limit`, - ), - ), - ); - this.#size += 1; return new Promise((resolve) => { let entry: QueuedRequest; const onAbort = @@ -118,7 +106,6 @@ export class GhidraRequestQueue { failQueued(failure: GhidraSessionError): void { for (const entry of this.#queue.splice(0)) { this.#release(entry); - this.#size -= 1; entry.resolve(err(failure)); } } @@ -130,7 +117,6 @@ export class GhidraRequestQueue { this.#release(entry); const remaining = entry.deadline - performance.now(); if (entry.signal?.aborted === true || remaining <= 0) { - this.#size -= 1; entry.resolve( err( entry.signal?.aborted === true @@ -163,7 +149,6 @@ export class GhidraRequestQueue { ) .finally(() => { this.#active = false; - this.#size -= 1; this.#drain(); }); } @@ -173,7 +158,6 @@ export class GhidraRequestQueue { if (index < 0) return; this.#queue.splice(index, 1); this.#release(entry); - this.#size -= 1; entry.resolve(result); } diff --git a/src/hopper/BridgeLauncher.ts b/src/hopper/BridgeLauncher.ts index 9798c77c59..6acec4a8ab 100644 --- a/src/hopper/BridgeLauncher.ts +++ b/src/hopper/BridgeLauncher.ts @@ -22,6 +22,9 @@ import { } from "./LinuxPrivateDisplayProbe.js"; import writeFileAtomic from "write-file-atomic"; +import { acquireHopperTargetLease } from "./HopperTargetLease.js"; +import type { HopperTargetLease } from "./HopperTargetLease.js"; + const execFileAsync = promisify(execFile); const HOPPER_BACKGROUND_STARTUP_MS = 5_000; @@ -74,6 +77,8 @@ export type HopperApplicationLauncherOptions = }); export interface HopperApplicationLauncherDependencies { + readonly platform?: NodeJS.Platform; + readonly acquireTargetLease?: typeof acquireHopperTargetLease; readonly selectPrivateDisplay?: (options: { readonly helperPath: string; readonly signal?: AbortSignal; @@ -109,65 +114,89 @@ export class HopperApplicationLauncher implements BridgeLauncher { HopperStartError | HopperCancelledError | HopperProcessError > > { - const bootstrapPath = `${session.directory}/bootstrap.py`; - const ownsProcessLifetime = usesLinuxDemo(this.options); - const source = [ - `REA_SOCKET = ${JSON.stringify(session.socketPath)}`, - `REA_TOKEN = ${JSON.stringify(session.token)}`, - `REA_RUN_ID = ${JSON.stringify(session.runId)}`, - `REA_TARGET_PATH = ${JSON.stringify(this.options.targetPath)}`, - `REA_OWNS_PROCESS_LIFETIME = ${ownsProcessLifetime ? "True" : "False"}`, - `exec(compile(open(${JSON.stringify(this.options.bridgeScriptPath)}, 'rb').read(), ${JSON.stringify(this.options.bridgeScriptPath)}, 'exec'))`, - "", - ].join("\n"); + const leaseResult = await this.#acquireTargetLease(session.runId); + if (!leaseResult.ok) return leaseResult; + const lease = leaseResult.value; + let leaseTransferred = false; try { - await writeFile(bootstrapPath, source, { encoding: "utf8", mode: 0o600 }); - await chmod(bootstrapPath, 0o600); - } catch (cause: unknown) { - return err(new HopperStartError({ cause })); + const ownsProcessLifetime = usesLinuxDemo(this.options); + const bootstrap = await this.#writeBootstrap( + session, + ownsProcessLifetime, + ); + if (!bootstrap.ok) return bootstrap; + const launched = await this.#launchPreparedTarget({ + session, + signal: options.signal, + bootstrapPath: bootstrap.value, + ownsProcessLifetime, + lease, + }); + leaseTransferred = launched.ok; + return launched; + } finally { + if (!leaseTransferred) await lease?.release(); } + } + async #launchPreparedTarget(input: { + readonly session: BridgeSession; + readonly signal: AbortSignal | undefined; + readonly bootstrapPath: string; + readonly ownsProcessLifetime: boolean; + readonly lease: HopperTargetLease | undefined; + }): Promise< + Result< + BridgeLaunch, + HopperStartError | HopperCancelledError | HopperProcessError + > + > { + const { session, signal, bootstrapPath, ownsProcessLifetime, lease } = + input; const action = this.options.targetKind === "database" ? "--database" : "--executable"; - const args = [ + const argumentsForTarget = [ ...this.options.loaderArgs, "--analysis", - "--python", + "-Y", bootstrapPath, action, this.options.targetPath, ]; try { - if (options.signal?.aborted === true) - return err(new HopperCancelledError()); - const display = await this.#privateDisplay(options.signal); + if (signal?.aborted === true) return err(new HopperCancelledError()); + const display = await this.#privateDisplay(signal); if (!display.ok) return err(display.error); const prepared = await prepareHopperApplication( this.options.launcherPath, - options.signal, + signal, ); if (!prepared) return err(new HopperCancelledError()); const linuxDemo = linuxDemoLaunch( this.options, session, - args, + argumentsForTarget, display.strategy, ); - const ownershipCommand = - linuxDemo?.ownershipCommand ?? this.options.launcherPath; - const started = await spawnOwnedProviderProcess({ - command: linuxDemo?.command ?? this.options.launcherPath, - arguments: linuxDemo?.args ?? args, - runId: session.runId, - expectedCommand: ownershipCommand, + const started = await launchHopperProcess({ + options: this.options, + session, + bootstrapPath, + ownsProcessLifetime, + argumentsForTarget, + linuxDemo, + signal, }); - const child = started.process; - const pid = started.ownership.leaderPid; + if (started === null) return err(new HopperCancelledError()); + const cleanup = () => + cleanupOwnedProcessGroup(started.ownership).finally(() => + lease?.release(), + ); const ownership = { schema_version: 1, run_id: session.runId, - pid, - process_group_id: pid, + pid: started.ownership.leaderPid, + process_group_id: started.ownership.leaderPid, parent_pid: process.pid, launcher: linuxDemo?.command ?? this.options.launcherPath, created_at: new Date().toISOString(), @@ -183,16 +212,63 @@ export class HopperApplicationLauncher implements BridgeLauncher { return err(new HopperStartError({ cause })); } return ok({ - process: child, + process: started.process, ownsProcessLifetime: true, ownership: started.ownership, shutdownMode: ownsProcessLifetime ? "process-cleanup" : "bridge-request", - cleanup: () => cleanupOwnedProcessGroup(started.ownership), + cleanup, }); } catch (cause: unknown) { - return err(hopperLaunchFailure(cause, options.signal)); + return err(hopperLaunchFailure(cause, signal)); + } + } + + async #acquireTargetLease( + runId: string, + ): Promise> { + if ((this.dependencies.platform ?? process.platform) !== "darwin") + return ok(undefined); + try { + const acquisition = await ( + this.dependencies.acquireTargetLease ?? acquireHopperTargetLease + )({ + targetPath: this.options.targetPath, + targetKind: this.options.targetKind, + loaderArgs: this.options.loaderArgs, + runId, + }); + if (!acquisition.acquired) + return err( + new HopperStartError({ + ownerRunId: acquisition.owner.runId, + userMessage: + `This Hopper target is already open in REA session ${acquisition.owner.runId}. ` + + "Use that REA session or close it before opening this target again.", + }), + ); + return ok(acquisition.lease); + } catch (cause: unknown) { + return err(new HopperStartError({ cause })); + } + } + + async #writeBootstrap( + session: BridgeSession, + ownsProcessLifetime: boolean, + ): Promise> { + const bootstrapPath = `${session.directory}/bootstrap.py`; + try { + await writeFile( + bootstrapPath, + bridgeBootstrapSource(session, this.options, ownsProcessLifetime), + { encoding: "utf8", mode: 0o600 }, + ); + await chmod(bootstrapPath, 0o600); + return ok(bootstrapPath); + } catch (cause: unknown) { + return err(new HopperStartError({ cause })); } } @@ -228,6 +304,49 @@ export class HopperApplicationLauncher implements BridgeLauncher { } } +const bridgeBootstrapSource = ( + session: BridgeSession, + options: SharedHopperApplicationLauncherOptions, + ownsProcessLifetime: boolean, +): string => + [ + `REA_SOCKET = ${JSON.stringify(session.socketPath)}`, + `REA_TOKEN = ${JSON.stringify(session.token)}`, + `REA_RUN_ID = ${JSON.stringify(session.runId)}`, + `REA_TARGET_PATH = ${JSON.stringify(options.targetPath)}`, + `REA_OWNS_PROCESS_LIFETIME = ${ownsProcessLifetime ? "True" : "False"}`, + `exec(compile(open(${JSON.stringify(options.bridgeScriptPath)}, 'rb').read(), ${JSON.stringify(options.bridgeScriptPath)}, 'exec'))`, + "", + ].join("\n"); + +const launchHopperProcess = async (input: { + readonly options: HopperApplicationLauncherOptions; + readonly session: BridgeSession; + readonly bootstrapPath: string; + readonly ownsProcessLifetime: boolean; + readonly argumentsForTarget: readonly string[]; + readonly linuxDemo: ReturnType; + readonly signal: AbortSignal | undefined; +}): Promise> | null> => { + const ownershipCommand = + input.linuxDemo?.ownershipCommand ?? input.options.launcherPath; + const spawn = (arguments_: readonly string[]) => + spawnOwnedProviderProcess({ + command: input.options.launcherPath, + arguments: arguments_, + runId: input.session.runId, + expectedCommand: ownershipCommand, + }); + if (input.linuxDemo !== undefined) + return spawnOwnedProviderProcess({ + command: input.linuxDemo.command, + arguments: input.linuxDemo.args, + runId: input.session.runId, + expectedCommand: ownershipCommand, + }); + return spawn(input.argumentsForTarget); +}; + export const linuxDemoLaunch = ( options: HopperApplicationLauncherOptions, session: BridgeSession, diff --git a/src/hopper/HopperAnalysisProfile.ts b/src/hopper/HopperAnalysisProfile.ts index bc74aff04c..4791d7fb99 100644 --- a/src/hopper/HopperAnalysisProfile.ts +++ b/src/hopper/HopperAnalysisProfile.ts @@ -48,7 +48,7 @@ export const resolveHopperAnalysisProfile = async ( version: `launcher-sha256:${launcherDigest.value}`, }; return ok({ - profile: createAnalysisProfile(provider, 1, { + profile: createAnalysisProfile(provider, { target_kind: target.kind, target_format: target.format, architecture: target.architecture ?? null, diff --git a/src/hopper/HopperCleanup.ts b/src/hopper/HopperCleanup.ts index 3f33ef5edd..2a327c2f69 100644 --- a/src/hopper/HopperCleanup.ts +++ b/src/hopper/HopperCleanup.ts @@ -40,6 +40,7 @@ export interface HopperCleanupInput { readonly processSupervisor: ProviderProcessSupervisor | undefined; readonly runtimeRoot: PrivateRuntimeRoot | undefined; readonly activeRequest: HopperRequestActivity | null; + readonly retainDocument: boolean; readonly progress: ProgressReporter | undefined; readonly logger: Logger; readonly onDiagnostic: ((event: HopperDiagnostic) => void) | undefined; @@ -59,7 +60,13 @@ export const cleanupHopperSession = async ( cleanupResult: undefined, shutdownConfirmed: false, }; - await report(input.progress, 0, "requesting Hopper document shutdown"); + await report( + input.progress, + 0, + input.retainDocument + ? "detaching REA from the Hopper document" + : "requesting Hopper document shutdown", + ); await requestShutdown(input, state); await report(input.progress, 0.35, "releasing Hopper bridge transport"); input.releaseTransport(input.socket); @@ -90,7 +97,11 @@ const requestShutdown = async ( return; } const shutdown = await input - .request("shutdown") + .request( + input.retainDocument || input.launch?.shutdownMode === "process-cleanup" + ? "shutdown" + : "shutdown_document", + ) .catch(() => err(new HopperProcessError(null))); if ( shutdown.ok && diff --git a/src/hopper/HopperClient.ts b/src/hopper/HopperClient.ts index cba58d7def..181b126d86 100644 --- a/src/hopper/HopperClient.ts +++ b/src/hopper/HopperClient.ts @@ -51,7 +51,6 @@ import { export type { HopperServerInfo } from "./HopperSessionValues.js"; const SHUTDOWN_TIMEOUT_MS = 30_000; -const MAX_QUEUED_REQUESTS = 64; const SESSION_ROOT = process.platform === "darwin" ? "/tmp" : tmpdir(); /** Dependencies, deadlines, and redacted diagnostics for one bridge client. */ @@ -64,6 +63,11 @@ export interface HopperClientOptions { readonly logger?: Logger; } +type HopperClientCloseOptions = { + readonly progress?: ProgressReporter; + readonly retainDocument?: boolean; +}; + /** Safe launcher telemetry; stderr content is intentionally never exposed. */ /** * Owns one authenticated NDJSON-over-Unix-socket bridge session. @@ -112,7 +116,6 @@ export class HopperClient { startupTimeoutMs: options.startupTimeoutMs ?? 120_000, }; this.#requests = new HopperRequestQueue( - MAX_QUEUED_REQUESTS, ({ id, method, params }, failed) => { const socket = this.#socket; const token = this.#token; @@ -308,7 +311,7 @@ export class HopperClient { /** Stop the bridge and report whether every owned resource was verified clean. */ closeWithOutcome( - options: { readonly progress?: ProgressReporter } = {}, + options: HopperClientCloseOptions = {}, ): Promise> { const starting = this.#startPromise; const controller = this.#startupController; @@ -322,7 +325,7 @@ export class HopperClient { async #close( starting: Promise> | undefined, controller: AbortController | undefined, - options: { readonly progress?: ProgressReporter }, + options: HopperClientCloseOptions, ): Promise> { try { await starting?.catch(() => undefined); @@ -337,7 +340,7 @@ export class HopperClient { } async #cleanup( - options: { readonly progress?: ProgressReporter } = {}, + options: HopperClientCloseOptions = {}, ): Promise> { this.#closing = true; try { @@ -352,6 +355,7 @@ export class HopperClient { onDiagnostic: this.#options.onDiagnostic, request: (method) => this.#request(method, {}, { timeoutMs: SHUTDOWN_TIMEOUT_MS }), + retainDocument: options.retainDocument === true, releaseTransport: (socket) => { this.#failAll(new HopperProcessError(null)); if (socket !== undefined) this.#detachSocket(socket); @@ -419,14 +423,14 @@ export class HopperClient { readonly progress?: ProgressReporter; }, ): Promise> { + const id = this.#nextId++; const socket = this.#socket; const token = this.#token; if (socket === undefined || socket.destroyed || token === undefined) { - return err(new HopperProcessError(null)); + return err(new HopperProcessError(null, undefined, method, id)); } if (options.signal?.aborted === true) return err(new HopperCancelledError()); - const id = this.#nextId++; const startedAt = performance.now(); const timeoutMs = options.timeoutMs ?? this.#options.requestTimeoutMs; const result = await this.#requests.run(id, method, params, { diff --git a/src/hopper/HopperProvider.test.ts b/src/hopper/HopperProvider.test.ts index c54831b0d3..880f9d08db 100644 --- a/src/hopper/HopperProvider.test.ts +++ b/src/hopper/HopperProvider.test.ts @@ -19,15 +19,13 @@ describe("Hopper provider capabilities", () => { for (const descriptor of capabilities) { expect(descriptor.provider).toEqual(provider.identity()); expect(descriptor).toMatchObject({ - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, }); } expect( capabilities.find(({ operation }) => operation === "list_procedures"), - ).toMatchObject({ pagination: "offset" }); + ).toMatchObject({ pagination: "none" }); expect( capabilities.find(({ operation }) => operation === "set_comment"), ).toMatchObject({ diff --git a/src/hopper/HopperProvider.ts b/src/hopper/HopperProvider.ts index 810dd44178..5ab23855e7 100644 --- a/src/hopper/HopperProvider.ts +++ b/src/hopper/HopperProvider.ts @@ -58,8 +58,6 @@ const CAPABILITIES: readonly CapabilityDescriptor[] = Object.freeze( return Object.freeze({ provider: IDENTITY, operation, - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: diff --git a/src/hopper/HopperRequestQueue.ts b/src/hopper/HopperRequestQueue.ts index 3ffe238c65..a19eddf10f 100644 --- a/src/hopper/HopperRequestQueue.ts +++ b/src/hopper/HopperRequestQueue.ts @@ -10,6 +10,7 @@ import { type HopperError, HopperProcessError, HopperProtocolError, + HopperRemoteError, HopperTimeoutError, } from "../domain/errors.js"; import type { JsonValue } from "../domain/jsonValue.js"; @@ -58,15 +59,12 @@ interface QueuedRequest { heartbeat: NodeJS.Timeout | undefined; } -/** Bounded FIFO that keeps the wire serialized until Hopper actually replies. */ +/** FIFO that keeps the wire serialized until Hopper actually replies. */ export class HopperRequestQueue { readonly #queue: QueuedRequest[] = []; #active: QueuedRequest | undefined; - constructor( - private readonly maximum: number, - private readonly send: RequestSender, - ) {} + constructor(private readonly send: RequestSender) {} /** Queue one request, counting queue wait against its caller deadline. */ run( @@ -78,14 +76,8 @@ export class HopperRequestQueue { if (options.signal?.aborted === true) return Promise.resolve(err(new HopperCancelledError())); if (options.timeoutMs <= 0) - return Promise.resolve(err(new HopperTimeoutError(options.timeoutMs))); - if (this.#size() >= this.maximum) return Promise.resolve( - err( - new HopperProtocolError( - `Hopper serial request queue reached its ${String(this.maximum)}-request limit`, - ), - ), + err(new HopperTimeoutError(options.timeoutMs, method, id)), ); return new Promise((resolve) => { let entry: QueuedRequest; @@ -125,7 +117,23 @@ export class HopperRequestQueue { const entry = this.#active; if (entry === undefined || entry.id !== id) return false; this.#releaseWire(entry); - if (!entry.callerSettled) this.#settleCaller(entry, result, "waiting"); + if (!entry.callerSettled) { + const contextual = + !result.ok && result.error instanceof HopperRemoteError + ? err( + new HopperRemoteError( + result.error.code, + result.error.safeMessage, + { + diagnosticType: result.error.diagnosticType, + operation: entry.method, + requestId: entry.id, + }, + ), + ) + : result; + this.#settleCaller(entry, contextual, "waiting"); + } this.#active = undefined; this.#drain(); return true; @@ -160,10 +168,18 @@ export class HopperRequestQueue { if (active !== undefined) { this.#releaseWire(active); if (!active.callerSettled) - this.#settleCaller(active, err(error), "waiting"); + this.#settleCaller( + active, + err(withRequestContext(error, active)), + "waiting", + ); } for (const entry of this.#queue.splice(0)) - this.#settleCaller(entry, err(error), "waiting"); + this.#settleCaller( + entry, + err(withRequestContext(error, entry)), + "waiting", + ); } /** Snapshot the one request still occupying Hopper's serial Python thread. */ @@ -204,7 +220,9 @@ export class HopperRequestQueue { entry, entry.signal?.aborted === true ? err(new HopperCancelledError()) - : err(new HopperTimeoutError(entry.timeoutMs)), + : err( + new HopperTimeoutError(entry.timeoutMs, entry.method, entry.id), + ), entry.signal?.aborted === true ? "cancelled" : "timed_out", ); this.#drain(); @@ -239,7 +257,14 @@ export class HopperRequestQueue { if (this.#active === entry) { this.#settleCaller( entry, - err(new HopperTimeoutError(entry.timeoutMs)), + err( + new HopperTimeoutError( + entry.timeoutMs, + entry.method, + entry.id, + "busy", + ), + ), "timed_out", ); return; @@ -249,7 +274,7 @@ export class HopperRequestQueue { this.#queue.splice(index, 1); this.#settleCaller( entry, - err(new HopperTimeoutError(entry.timeoutMs)), + err(new HopperTimeoutError(entry.timeoutMs, entry.method, entry.id)), "timed_out", ); } @@ -311,3 +336,16 @@ export class HopperRequestQueue { } } } + +const withRequestContext = ( + error: HopperError, + entry: QueuedRequest, +): HopperError => + error instanceof HopperProcessError + ? new HopperProcessError( + error.exitCode, + error.diagnostic, + entry.method, + entry.id, + ) + : error; diff --git a/src/hopper/HopperSessionValues.ts b/src/hopper/HopperSessionValues.ts index 3bb3e6caa7..cac9ba1821 100644 --- a/src/hopper/HopperSessionValues.ts +++ b/src/hopper/HopperSessionValues.ts @@ -25,12 +25,15 @@ export const parseHopperServerInfo = ( return err(new HopperProtocolError("Hopper bridge health result is invalid")); }; -/** Require Hopper to confirm both analysis and document shutdown. */ +/** Require confirmation that the REA bridge detached or its document closed. */ export const isHopperShutdownAcknowledgement = (value: JsonValue): boolean => { if (typeof value !== "object" || value === null || Array.isArray(value)) return false; if (value.shutdown !== true) return false; - return value.analysis_stopped === true && value.document_closed === true; + return ( + (value.analysis_stopped === true && value.document_closed === true) || + (value.document_closed === false && value.document_retained === true) + ); }; /** Detect the verified Linux bridge response that requires group cleanup. */ diff --git a/src/hopper/HopperTargetLease.test.ts b/src/hopper/HopperTargetLease.test.ts new file mode 100644 index 0000000000..fd9795957e --- /dev/null +++ b/src/hopper/HopperTargetLease.test.ts @@ -0,0 +1,79 @@ +import { mkdtemp, rm } from "node:fs/promises"; +import { join } from "node:path"; + +import { afterEach, describe, expect, it } from "vitest"; + +import { acquireHopperTargetLease } from "./HopperTargetLease.js"; + +const directories: string[] = []; + +afterEach(async () => { + await Promise.all( + directories + .splice(0) + .map((directory) => rm(directory, { recursive: true, force: true })), + ); +}); + +describe("Hopper target leases", () => { + it("reports the owning REA session for a duplicate target and profile", async () => { + const directory = await temporaryDirectory(); + const first = await acquireHopperTargetLease({ + ...leaseInput, + directory, + runId: "session-first", + }); + expect(first.acquired).toBe(true); + if (!first.acquired) return; + + const duplicate = await acquireHopperTargetLease({ + ...leaseInput, + directory, + runId: "session-second", + }); + expect(duplicate).toMatchObject({ + acquired: false, + owner: { runId: "session-first", processId: process.pid }, + }); + + await first.lease.release(); + const reopened = await acquireHopperTargetLease({ + ...leaseInput, + directory, + runId: "session-third", + }); + expect(reopened.acquired).toBe(true); + if (reopened.acquired) await reopened.lease.release(); + }); + + it("keeps different Hopper profiles independent", async () => { + const directory = await temporaryDirectory(); + const first = await acquireHopperTargetLease({ + ...leaseInput, + directory, + runId: "session-one", + }); + const second = await acquireHopperTargetLease({ + ...leaseInput, + directory, + loaderArgs: ["--aarch64"], + runId: "session-two", + }); + expect(first.acquired).toBe(true); + expect(second.acquired).toBe(true); + if (first.acquired) await first.lease.release(); + if (second.acquired) await second.lease.release(); + }); +}); + +const leaseInput = { + targetPath: "/tmp/sample-binary", + targetKind: "executable" as const, + loaderArgs: [], +}; + +const temporaryDirectory = async (): Promise => { + const directory = await mkdtemp(join("/tmp", "rea-hl-")); + directories.push(directory); + return directory; +}; diff --git a/src/hopper/HopperTargetLease.ts b/src/hopper/HopperTargetLease.ts new file mode 100644 index 0000000000..b250a39483 --- /dev/null +++ b/src/hopper/HopperTargetLease.ts @@ -0,0 +1,159 @@ +import { createHash } from "node:crypto"; +import { chmod, lstat, mkdir, realpath, rm } from "node:fs/promises"; +import { + createConnection, + createServer, + type Server, + type Socket, +} from "node:net"; +import { join, resolve } from "node:path"; + +interface HopperTargetLeaseOwner { + readonly runId: string; + readonly processId: number; +} + +export interface HopperTargetLease { + readonly release: () => Promise; +} + +export type HopperTargetLeaseAcquisition = + | { readonly acquired: true; readonly lease: HopperTargetLease } + | { readonly acquired: false; readonly owner: HopperTargetLeaseOwner }; + +const leaseDirectory = join("/tmp", `rea-hopper-${process.getuid?.() ?? 0}`); + +/** Keep two REA processes from opening duplicate Hopper documents for one target/profile. */ +export const acquireHopperTargetLease = async (input: { + readonly targetPath: string; + readonly targetKind: "executable" | "database"; + readonly loaderArgs: readonly string[]; + readonly runId: string; + readonly directory?: string; +}): Promise => { + const directory = input.directory ?? leaseDirectory; + await ensureLeaseDirectory(directory); + const targetPath = await realpath(input.targetPath).catch(() => + resolve(input.targetPath), + ); + const key = createHash("sha256") + .update( + JSON.stringify({ + targetPath, + targetKind: input.targetKind, + loaderArgs: input.loaderArgs, + }), + ) + .digest("hex") + .slice(0, 32); + const socketPath = join(directory, `${key}.sock`); + const owner = { runId: input.runId, processId: process.pid }; + + for (let attempt = 0; attempt < 2; attempt += 1) { + const server = createServer((socket) => sendOwner(socket, owner)); + const bound = await bind(server, socketPath); + if (bound) { + await chmod(socketPath, 0o600); + let released = false; + return { + acquired: true, + lease: { + release: async () => { + if (released) return; + released = true; + await closeServer(server); + await rm(socketPath, { force: true }); + }, + }, + }; + } + + const existingOwner = await readOwner(socketPath); + if (existingOwner !== undefined) + return { acquired: false, owner: existingOwner }; + await rm(socketPath, { force: true }); + } + + throw new Error("Could not acquire the Hopper target lease"); +}; + +const ensureLeaseDirectory = async (directory: string): Promise => { + await mkdir(directory, { recursive: true, mode: 0o700 }); + const directoryStat = await lstat(directory); + if ( + directoryStat.isSymbolicLink() || + directoryStat.isDirectory() === false || + (process.getuid !== undefined && directoryStat.uid !== process.getuid()) + ) + throw new Error("Hopper target lease directory is not private"); + if ((directoryStat.mode & 0o077) !== 0) await chmod(directory, 0o700); +}; + +const bind = (server: Server, socketPath: string): Promise => + new Promise((resolveBind, reject) => { + const onError = (error: NodeJS.ErrnoException): void => { + server.removeListener("listening", onListening); + if (error.code === "EADDRINUSE") resolveBind(false); + else reject(error); + }; + const onListening = (): void => { + server.removeListener("error", onError); + resolveBind(true); + }; + server.once("error", onError); + server.once("listening", onListening); + server.listen(socketPath); + }); + +const sendOwner = (socket: Socket, owner: HopperTargetLeaseOwner): void => { + socket.end(`${JSON.stringify(owner)}\n`); +}; + +const readOwner = ( + socketPath: string, +): Promise => + new Promise((resolveOwner) => { + const socket = createConnection(socketPath); + let response = ""; + const timer = setTimeout(() => { + socket.destroy(); + resolveOwner(undefined); + }, 250); + const finish = (owner: HopperTargetLeaseOwner | undefined): void => { + clearTimeout(timer); + socket.destroy(); + resolveOwner(owner); + }; + socket.on("data", (chunk: Buffer) => { + response += chunk.toString("utf8"); + const newline = response.indexOf("\n"); + if (newline < 0) return; + try { + const value: unknown = JSON.parse(response.slice(0, newline)); + if ( + typeof value === "object" && + value !== null && + typeof Reflect.get(value, "runId") === "string" && + typeof Reflect.get(value, "processId") === "number" + ) + finish({ + runId: Reflect.get(value, "runId") as string, + processId: Reflect.get(value, "processId") as number, + }); + else finish(undefined); + } catch { + finish(undefined); + } + }); + socket.on("error", () => finish(undefined)); + socket.on("end", () => finish(undefined)); + }); + +const closeServer = (server: Server): Promise => + new Promise((resolveClose, reject) => { + if (!server.listening) { + resolveClose(); + return; + } + server.close((error) => (error ? reject(error) : resolveClose())); + }); diff --git a/src/hopper/protocol.ts b/src/hopper/protocol.ts index c66a2d3121..550a4121d7 100644 --- a/src/hopper/protocol.ts +++ b/src/hopper/protocol.ts @@ -108,10 +108,8 @@ export const responseResult = ( ): Result => "error" in response ? err( - new HopperRemoteError( - response.error.code, - response.error.message, - response.error.type, - ), + new HopperRemoteError(response.error.code, response.error.message, { + diagnosticType: response.error.type, + }), ) : ok(response.result); diff --git a/src/main/reload.ts b/src/main/reload.ts index 0928a302c3..7062d563f4 100644 --- a/src/main/reload.ts +++ b/src/main/reload.ts @@ -63,11 +63,6 @@ export const registerConfigReload = (input: { runtimeState.snapshotPolicy, refreshed.value.analysisSnapshotFilePolicy, ); - runtimeState.investigationRoots.splice( - 0, - runtimeState.investigationRoots.length, - ...refreshed.value.investigationInputRoots, - ); }) .catch(() => { serverLogger.error(MCP_PERMISSION_RELOAD_FAILED); diff --git a/src/main/shutdown.ts b/src/main/shutdown.ts index f0c652c823..c4430eba3a 100644 --- a/src/main/shutdown.ts +++ b/src/main/shutdown.ts @@ -32,7 +32,7 @@ export const createShutdown = (input: { unregisterReload(); unregisterShutdown(); await handle.close(); - await session.close(); + await session.close({ retainProviderDocuments: true }); permissionAuthority.clearSessionGrants(); })(); return shutdownPromise; diff --git a/src/main/state.ts b/src/main/state.ts index 61fdcc9f5b..c3dcf7844b 100644 --- a/src/main/state.ts +++ b/src/main/state.ts @@ -5,7 +5,6 @@ export interface RuntimeState { currentConfig: AppConfig; evidencePolicy: EvidenceFilePolicy & { roots: string[] }; snapshotPolicy: EvidenceFilePolicy & { roots: string[] }; - investigationRoots: string[]; } export const createRuntimeState = (config: AppConfig): RuntimeState => ({ @@ -18,5 +17,4 @@ export const createRuntimeState = (config: AppConfig): RuntimeState => ({ ...config.analysisSnapshotFilePolicy, roots: [...config.analysisSnapshotFilePolicy.roots], }, - investigationRoots: [...config.investigationInputRoots], }); diff --git a/src/main/transport.ts b/src/main/transport.ts index 673dc036d8..221ac1aa3d 100644 --- a/src/main/transport.ts +++ b/src/main/transport.ts @@ -61,8 +61,6 @@ export const startMcpTransport = async ( processPolicy: () => serverContext.runtimeState.currentConfig.processExecutionPolicy, evidenceFilePolicy: serverContext.runtimeState.evidencePolicy, - investigationInputRoots: - serverContext.runtimeState.investigationRoots, analysisSnapshotFilePolicy: serverContext.runtimeState.snapshotPolicy, permissionAuthority: serverContext.permissionAuthority, ...optionalProviders, @@ -96,7 +94,6 @@ const runtimeAvailability = (state: RuntimeState) => ({ processCaptureEnabled: state.currentConfig.processExecutionPolicy.status === "enabled", evidenceFileRoots: state.currentConfig.evidenceFilePolicy.roots.length, - investigationInputRoots: state.currentConfig.investigationInputRoots.length, browserObservationEnabled: state.currentConfig.browserObservationPolicy.status === "enabled", browserScenarioEnabled: diff --git a/src/mcpDoctor.ts b/src/mcpDoctor.ts index f7f9dff189..7b5b192278 100644 --- a/src/mcpDoctor.ts +++ b/src/mcpDoctor.ts @@ -3,11 +3,7 @@ import { StdioClientTransport } from "@modelcontextprotocol/client/stdio"; import { Formatter } from "incur"; import { resolve } from "node:path"; -import { - CATALOG_IDENTITY, - MCP_RESOURCE_CATALOG, - MCP_RESOURCE_TEMPLATE_CATALOG, -} from "./catalogIdentity.js"; +import { CATALOG_IDENTITY } from "./catalogIdentity.js"; import { PROMPT_CONTRACTS } from "./contracts/promptContracts.js"; import { TOOL_CONTRACTS } from "./contracts/toolContracts.js"; import { PRODUCT_IDENTITY } from "./identity.js"; @@ -100,18 +96,11 @@ const inspectProductionMcpSession = async ( signal: AbortSignal, ) => { const request = requestOptions(deadline, signal); - const [tools, prompts, resources, templates, identity, requestFlow] = - await Promise.all([ - client.listTools(undefined, request), - client.listPrompts(undefined, request), - client.listResources(undefined, request), - client.listResourceTemplates(undefined, request), - client.readResource({ uri: "rea://server/identity" }, request), - client.callTool( - { name: "binary_session", arguments: { detail: "full" } }, - request, - ), - ]); + const [tools, prompts, requestFlow] = await Promise.all([ + client.listTools(undefined, request), + client.listPrompts(undefined, request), + client.callTool({ name: "binary_session", arguments: {} }, request), + ]); const inventory = { tools: compareInventory( TOOL_CONTRACTS.map(({ name }) => name), @@ -121,16 +110,10 @@ const inspectProductionMcpSession = async ( PROMPT_CONTRACTS.map(({ name }) => name), prompts.prompts.map(({ name }) => name), ), - resources: compareInventory( - MCP_RESOURCE_CATALOG.map(({ name }) => name), - resources.resources.map(({ name }) => name), - ), - resource_templates: compareInventory( - MCP_RESOURCE_TEMPLATE_CATALOG.map(({ name }) => name), - templates.resourceTemplates.map(({ name }) => name), - ), }; - const observedIdentity = parseIdentityResource(identity.contents); + const observedIdentity = parseIdentityToolResult( + requestFlow.structuredContent, + ); const serverVersion = client.getServerVersion(); const protocolVersion = client.getNegotiatedProtocolVersion(); const checks: McpDoctorCheck[] = [ @@ -245,37 +228,29 @@ const inventoryCheck = ( detail: `expected=${String(comparison.expected)} observed=${String(comparison.observed)} missing=${comparison.missing.join(",") || "none"} unexpected=${comparison.unexpected.join(",") || "none"} duplicates=${comparison.duplicates.join(",") || "none"}`, }); -const parseIdentityResource = ( - contents: readonly unknown[], +const parseIdentityToolResult = ( + input: unknown, ): { readonly packageVersion: string | null; readonly catalogDigest: string | null; } => { - const first = contents.find( - (candidate) => isRecord(candidate) && typeof candidate.text === "string", - ); - if (!isRecord(first) || typeof first.text !== "string") + if (!isRecord(input) || !isRecord(input.result)) return { packageVersion: null, catalogDigest: null }; - try { - const identity: unknown = JSON.parse(first.text); - if (!isRecord(identity)) - return { packageVersion: null, catalogDigest: null }; - const packageIdentity = identity.package; - const catalog = identity.catalog; - const digests = isRecord(catalog) ? catalog.digests : undefined; - return { - packageVersion: - isRecord(packageIdentity) && typeof packageIdentity.version === "string" - ? packageIdentity.version - : null, - catalogDigest: - isRecord(digests) && typeof digests.combined_sha256 === "string" - ? digests.combined_sha256 - : null, - }; - } catch { - return { packageVersion: null, catalogDigest: null }; - } + const identity = input.result.server_identity; + if (!isRecord(identity)) return { packageVersion: null, catalogDigest: null }; + const packageIdentity = identity.package; + const catalog = identity.catalog; + const digests = isRecord(catalog) ? catalog.digests : undefined; + return { + packageVersion: + isRecord(packageIdentity) && typeof packageIdentity.version === "string" + ? packageIdentity.version + : null, + catalogDigest: + isRecord(digests) && typeof digests.combined_sha256 === "string" + ? digests.combined_sha256 + : null, + }; }; const parseOutputArguments = ( diff --git a/src/native/NativeMacOSProvider.ts b/src/native/NativeMacOSProvider.ts index db9d1329ae..600f83f95f 100644 --- a/src/native/NativeMacOSProvider.ts +++ b/src/native/NativeMacOSProvider.ts @@ -81,8 +81,6 @@ export class NativeMacOSProvider implements AnalysisProvider { return Object.freeze({ provider: IDENTITY, operation: contract.name, - inputContractVersion: 1, - outputContractVersion: 1, ...availability, pagination: "none" as const, exhaustive: contract.name !== "inspect_macho", diff --git a/src/replay/LinuxJavaScriptReplayRunner.ts b/src/replay/LinuxJavaScriptReplayRunner.ts index 554622fe68..65d01e5dc0 100644 --- a/src/replay/LinuxJavaScriptReplayRunner.ts +++ b/src/replay/LinuxJavaScriptReplayRunner.ts @@ -286,7 +286,6 @@ const resolveReplayResult = ( const right = response.right === undefined ? undefined : commitOutcomes(response.right); return { - schema_version: 1, plan_digest: prepared.publicPlan.plan_digest, outcomes: [...outcomes, ...(right ?? [])], ...(right === undefined diff --git a/src/replay/ReplayOutcome.ts b/src/replay/ReplayOutcome.ts index e14d808a37..f57781c3be 100644 --- a/src/replay/ReplayOutcome.ts +++ b/src/replay/ReplayOutcome.ts @@ -121,7 +121,6 @@ export const terminationResult = ( })); const differential = prepared.publicPlan.right !== undefined; return { - schema_version: 1, plan_digest: prepared.publicPlan.plan_digest, outcomes: [...outcomes, ...(differential ? outcomes : [])], ...(differential diff --git a/src/server/createServer.ts b/src/server/createServer.ts index a81291ded2..0d3a72171c 100644 --- a/src/server/createServer.ts +++ b/src/server/createServer.ts @@ -29,7 +29,7 @@ import { PRODUCT_IDENTITY } from "../identity.js"; import { silentLogger, type Logger } from "../logger.js"; import { LinuxJavaScriptReplayRunner } from "../replay/LinuxJavaScriptReplayRunner.js"; import { SystemJavaScriptReplayHost } from "../replay/SystemJavaScriptReplayHost.js"; -import { mcpClientMetadata, mcpEnvelopeValue } from "./mcpClientMetadata.js"; +import { mcpEnvelopeValue } from "./mcpClientMetadata.js"; import { PROCESS_CAPTURE_ELICITATION_POLICY, type ProcessCaptureElicitationState, @@ -40,7 +40,6 @@ import { registerBrowserScenarioTool } from "./registerBrowserScenarioTool.js"; import { registerBrowserTools } from "./registerBrowserTools.js"; import { registerElectronTools } from "./registerElectronTools.js"; import { registerEnhancedTools } from "./registerEnhancedTools.js"; -import { registerEvidenceResources } from "./registerEvidenceResources.js"; import { registerJavaScriptRuntimeObservationTools } from "./registerJavaScriptRuntimeObservationTools.js"; import { registerManagedTools } from "./registerManagedTools.js"; import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js"; @@ -56,16 +55,15 @@ import { } from "./sessionToolPolicies.js"; const TARGET_FREE_INSTRUCTIONS = - "ASAR/JavaScript -> analyze_javascript_application; archive/package -> open_binary(path), then inspect_artifact/inventory_artifact (active target); managed PE/CLI -> inspect_managed_artifact; browser/Electron -> list_browser_targets/list_electron_targets; approved -> capture_browser_scenario/capture_electron_scenario; Node/Electron Inspector -> list_javascript_runtime_targets; native binary/database -> open_binary, then binary_overview. Start with binary_session; use tools/list; capabilities via binary_session. Use summaries, cite Evidence IDs; Never repeat identical analysis or read full Evidence."; + "ASAR/JavaScript -> analyze_javascript_application; archive/package -> open_binary(path), then inspect_artifact/inventory_artifact; managed PE/CLI -> inspect_managed_artifact; browser/Electron -> list_browser_targets/list_electron_targets; capture_browser_scenario/capture_electron_scenario; Node/Electron Inspector -> list_javascript_runtime_targets; native binary/database -> open_binary, then binary_overview. Start with binary_session; use tools/list; capabilities via binary_session."; const ACTIVE_TARGET_INSTRUCTIONS = - "REA analyzes the active reverse-engineering target. Start native analysis with binary_overview, then narrow with analyze_function, literal search, callers, callees, and xrefs. Prefer summary views, never repeat an identical call, and read full Evidence only when the task requires it."; + "REA analyzes the active reverse-engineering target. Start native analysis with binary_overview, then use analyze_function, literal search, callers, callees, and xrefs as needed."; export interface CreateServerOptions { readonly logger?: Logger; readonly processPolicy?: () => ProcessExecutionPolicy; readonly evidenceFilePolicy?: EvidenceFilePolicy; - readonly investigationInputRoots?: readonly string[]; readonly analysisSnapshotFilePolicy?: EvidenceFilePolicy; readonly permissionAuthority?: PermissionAuthority; readonly browserObservation?: BrowserObservationPort; @@ -90,7 +88,6 @@ const installSessionToolAvailability = ( const policy = sessionAvailabilityPolicy(options.availabilityPolicy, { processPolicy: options.processPolicy?.() ?? DENY_PROCESS_POLICY, evidenceFilePolicy: options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY, - investigationInputRoots: options.investigationInputRoots ?? [], optionalFeatures: { browserObservationEnabled: options.browserObservation !== undefined, browserScenarioEnabled: options.browserScenarioCapture !== undefined, @@ -157,9 +154,7 @@ const createMcpServer = ( version: PRODUCT_IDENTITY.packageVersion, }, { - capabilities: { - resources: { subscribe: true }, - }, + capabilities: {}, inputRequired: { maxRounds: 3, roundTimeoutMs: PROCESS_CAPTURE_ELICITATION_POLICY.roundTimeoutMs, @@ -196,7 +191,6 @@ export const createServer = ( server.server.onclose = () => { permissionAuthority?.clearSessionGrants(); }; - registerServerIdentityResource(server, startedAt); const toolLogger = logger.child({ layer: "server" }); const { activeTarget, recordEvidence, recordEvidenceWithUnknown } = createSessionRecorders(server, session); @@ -218,7 +212,6 @@ export const createServer = ( registerObservationTools(toolContext); registerGuidedPrompts(server, analysis, session); if (session !== undefined) { - registerEvidenceResources(server, session); registerSessionTools(server, session, toolLogger, { ...options, ...(availability === undefined @@ -373,39 +366,3 @@ const registerObservationTools = ({ }, }); }; - -const registerServerIdentityResource = ( - server: McpServer, - startedAt: string, -): void => { - server.registerResource( - "server-identity", - "rea://server/identity", - { - title: "REA server identity", - description: "Live package, SDK, protocol, and catalog identity.", - mimeType: "application/json", - }, - async (uri, context) => { - const { createServerIdentity } = await import("../serverIdentity.js"); - const { client, protocolVersion } = mcpClientMetadata(context); - return { - contents: [ - { - uri: uri.href, - mimeType: "application/json", - text: JSON.stringify( - createServerIdentity({ - startedAt, - ...(client === undefined ? {} : { client }), - ...(protocolVersion === undefined ? {} : { protocolVersion }), - }), - null, - 2, - ), - }, - ], - }; - }, - ); -}; diff --git a/src/server/javascriptApplicationResult.ts b/src/server/javascriptApplicationResult.ts deleted file mode 100644 index 2bc71044a2..0000000000 --- a/src/server/javascriptApplicationResult.ts +++ /dev/null @@ -1,137 +0,0 @@ -import type { Evidence } from "../domain/evidence.js"; -import { javascriptApplicationAnalysisResultSchema } from "../domain/javascriptApplicationAnalysis.js"; -import { compareCodePoints } from "../domain/javascriptApplicationGraph.js"; -import type { JsonValue } from "../domain/jsonValue.js"; -import { javascriptApplicationAnalysisSummarySchema } from "../contracts/electronToolContracts.js"; - -const DEFAULT_GRAPH_PAGE_LIMIT = 100; -const ROOT_SAMPLE_LIMIT = 10; -const TOP_FINDING_LIMIT = 20; - -const FINDING_PRIORITY: Readonly> = { - "browser-window": 0, - "electron-preload": 1, - "context-bridge-api": 2, - "ipc-channel": 3, - "ipc-handler": 4, - "electron-utility": 5, - endpoint: 6, - storage: 7, - worker: 8, - "service-worker": 9, - "native-addon": 10, - "native-export": 11, - "source-map": 12, -}; - -/** Project complete JavaScript application Evidence into a bounded agent result. */ -export const summarizeJavaScriptApplicationEvidence = ( - evidence: Evidence, -): JsonValue => { - const result = javascriptApplicationAnalysisResultSchema.parse( - evidence.normalized_result, - ); - const nodeKinds = new Map(); - for (const node of result.graph.nodes) - nodeKinds.set(node.kind, (nodeKinds.get(node.kind) ?? 0) + 1); - const rootItems = result.graph.root_node_ids.slice(0, ROOT_SAMPLE_LIMIT); - const pageRoot = `rea://evidence/${evidence.evidence_id}/application-graph`; - const topFindings = [...result.graph.nodes] - .sort( - (left, right) => - (FINDING_PRIORITY[left.kind] ?? Number.MAX_SAFE_INTEGER) - - (FINDING_PRIORITY[right.kind] ?? Number.MAX_SAFE_INTEGER) || - compareCodePoints(left.node_id, right.node_id), - ) - .slice(0, TOP_FINDING_LIMIT) - .map((node) => { - const observation = node.observations[0]; - if (observation === undefined) - throw new TypeError("Application graph node has no observation"); - return { - node_id: node.node_id, - kind: node.kind, - label: observation.label, - authority: observation.evidence.authority, - state: observation.evidence.state, - confidence: observation.evidence.confidence, - location: observation.evidence.location, - }; - }); - const summary = - result.schema_version === 1 ? omitGraph(result) : omitGraphs(result); - const unknowns = new Set([ - ...result.limitations, - ...result.graph.limitations, - ]); - if (result.statistics.parse_failures > 0) - unknowns.add( - `${String(result.statistics.parse_failures)} JavaScript file(s) could not be parsed.`, - ); - if (result.statistics.truncated_scopes > 0) - unknowns.add( - `${String(result.statistics.truncated_scopes)} analysis scope(s) were truncated.`, - ); - if (result.graph.coverage.status !== "complete") - unknowns.add( - `Application graph coverage is ${result.graph.coverage.status}; omitted facts remain unknown.`, - ); - return javascriptApplicationAnalysisSummarySchema.parse({ - ...summary, - ...(result.schema_version === 1 - ? {} - : { - semantic_graph: { - graph_id: result.semantic_graph.graph_id, - nodes: result.semantic_graph.nodes.length, - relations: result.semantic_graph.relations.length, - unknown_frontiers: result.semantic_graph.unknowns.length, - fingerprints: result.semantic_graph.fingerprints.length, - coverage: result.semantic_graph.coverage.status, - query_tool: "trace_javascript_semantics", - }, - }), - unknowns: [...unknowns], - graph: { - graph_id: result.graph.graph_id, - node_count: result.graph.nodes.length, - edge_count: result.graph.edges.length, - roots: { - items: rootItems, - total: result.graph.root_node_ids.length, - truncated: rootItems.length < result.graph.root_node_ids.length, - }, - node_kinds: [...nodeKinds] - .sort(([left], [right]) => compareCodePoints(left, right)) - .map(([kind, count]) => ({ kind, count })), - top_findings: topFindings, - coverage: result.graph.coverage, - limitations: result.graph.limitations, - pages: { - nodes: `${pageRoot}/nodes/offset/0/limit/${String(DEFAULT_GRAPH_PAGE_LIMIT)}`, - edges: `${pageRoot}/edges/offset/0/limit/${String(DEFAULT_GRAPH_PAGE_LIMIT)}`, - page_limit: DEFAULT_GRAPH_PAGE_LIMIT, - }, - }, - }); -}; - -const omitGraph = ( - result: Extract< - ReturnType, - { readonly schema_version: 1 } - >, -) => { - const { graph: _graph, ...summary } = result; - return summary; -}; - -const omitGraphs = ( - result: Extract< - ReturnType, - { readonly schema_version: 2 } - >, -) => { - const { graph: _graph, semantic_graph: _semanticGraph, ...summary } = result; - return summary; -}; diff --git a/src/server/promptCompletion.ts b/src/server/promptCompletion.ts index b0a7afd7ce..07563b44c2 100644 --- a/src/server/promptCompletion.ts +++ b/src/server/promptCompletion.ts @@ -4,13 +4,8 @@ import type { AnalysisOperationPort } from "../application/AnalysisProvider.js"; import type { BinarySessionPort } from "../application/BinarySession.js"; import type { PromptCompletionKind } from "../contracts/promptContracts.js"; import { artifactInventoryResultSchema } from "../domain/artifactGraph.js"; -import { parseAddressedPage } from "../domain/hopperValues.js"; import { processCaptureSchema } from "../domain/processCapture.js"; -const COMPLETION_SCAN_LIMIT = 10_000; -const PROCEDURE_PAGE_SIZE = 500; -const MAX_COMPLETION_VALUE_LENGTH = 4_096; - const documentListSchema = z.array(z.string().min(1)); const providerStatusSchema = z.object({ providers: z.array(z.object({ id: z.string().min(1) })), @@ -32,13 +27,12 @@ export interface PromptCompletionSource { ): Promise; } -/** Build bounded live completion over the active provider and session ledger. */ +/** Build live completion over the active provider and session ledger. */ export const createPromptCompletionSource = ( analysis: AnalysisOperationPort, session?: BinarySessionPort, ): PromptCompletionSource => ({ async complete(kind, value, context) { - if (value.length > MAX_COMPLETION_VALUE_LENGTH) return []; const candidates = await completionCandidates( kind, analysis, @@ -46,9 +40,9 @@ export const createPromptCompletionSource = ( context, ); const prefix = normalize(value); - return uniqueSorted(candidates) - .filter((candidate) => normalize(candidate).startsWith(prefix)) - .slice(0, COMPLETION_SCAN_LIMIT); + return uniqueSorted(candidates).filter((candidate) => + normalize(candidate).startsWith(prefix), + ); }, }); @@ -81,38 +75,25 @@ const documentCandidates = async ( const result = await analysis.execute("list_documents", {}); if (!result.ok) return []; const parsed = documentListSchema.safeParse(result.value.result); - return parsed.success ? parsed.data.slice(0, COMPLETION_SCAN_LIMIT) : []; + return parsed.success ? parsed.data : []; }; const procedureCandidates = async ( analysis: AnalysisOperationPort, document: string | undefined, ): Promise => { - if (document !== undefined && document.length > MAX_COMPLETION_VALUE_LENGTH) - return []; const byAddress = new Map(); - let offset = 0; - let exhaustive = false; - while (byAddress.size < COMPLETION_SCAN_LIMIT / 2) { - const result = await analysis.execute("list_procedures", { - offset, - limit: PROCEDURE_PAGE_SIZE, - ...(document === undefined || document.length === 0 ? {} : { document }), - }); - if (!result.ok) break; - const parsed = parseAddressedPage(result.value.result); - if (!parsed.ok) break; - for (const item of parsed.value.items) { - if (byAddress.size >= COMPLETION_SCAN_LIMIT / 2) break; - if (!byAddress.has(item.address)) byAddress.set(item.address, item.name); - } - const nextOffset = parsed.value.nextOffset; - if (!parsed.value.hasMore) { - exhaustive = true; - break; - } - if (nextOffset === null || nextOffset <= offset) break; - offset = nextOffset; + const input = + document === undefined || document.length === 0 ? {} : { document }; + const result = await analysis.execute("list_procedures", input); + if (result.ok) { + const parsed = z + .array(z.object({ address: z.string(), value: z.string() })) + .safeParse(result.value.result); + if (parsed.success) + for (const item of parsed.data) + if (!byAddress.has(item.address)) + byAddress.set(item.address, item.value); } const addressesByName = new Map>(); @@ -122,9 +103,8 @@ const procedureCandidates = async ( addressesByName.set(name, addresses); } const candidates = [...byAddress.keys()]; - if (exhaustive) - for (const [name, addresses] of addressesByName) - if (addresses.size === 1 && name.length > 0) candidates.push(name); + for (const [name, addresses] of addressesByName) + if (addresses.size === 1 && name.length > 0) candidates.push(name); return candidates; }; @@ -140,7 +120,7 @@ const providerCandidates = ( ({ provider }) => provider.id, ) ?? []) : parsed.data.providers.map(({ id }) => id); - return ["auto", ...candidates].slice(0, COMPLETION_SCAN_LIMIT); + return ["auto", ...candidates]; }; const evidenceCandidates = ( @@ -149,11 +129,8 @@ const evidenceCandidates = ( ): readonly string[] => { if (session === undefined) return []; const candidates: string[] = []; - for (const evidence of session.exportEvidenceBundle().records) { - const remaining = COMPLETION_SCAN_LIMIT - candidates.length; - candidates.push(...evidenceValues(kind, evidence).slice(0, remaining)); - if (candidates.length >= COMPLETION_SCAN_LIMIT) break; - } + for (const evidence of session.exportEvidenceBundle().records) + candidates.push(...evidenceValues(kind, evidence)); return candidates; }; @@ -191,18 +168,10 @@ const unknownCandidates = ( : session .listUnknowns() .filter(({ status }) => status !== "resolved") - .map(({ unknown_id: id }) => id) - .slice(0, COMPLETION_SCAN_LIMIT); + .map(({ unknown_id: id }) => id); const uniqueSorted = (values: readonly string[]): string[] => - [ - ...new Set( - values.filter( - (value) => - value.length > 0 && value.length <= MAX_COMPLETION_VALUE_LENGTH, - ), - ), - ].sort(compareText); + [...new Set(values.filter((value) => value.length > 0))].sort(compareText); const compareText = (left: string, right: string): number => left < right ? -1 : left > right ? 1 : 0; diff --git a/src/server/registerApplicationTools/characterization.ts b/src/server/registerApplicationTools/characterization.ts index 1be1ac2888..f11ec3d3b5 100644 --- a/src/server/registerApplicationTools/characterization.ts +++ b/src/server/registerApplicationTools/characterization.ts @@ -52,9 +52,7 @@ export const registerCharacterizationTools = ( ); if (recorded !== undefined && !recorded.ok) return toCallToolResult(recorded, prepareContract); - return toCallToolResult(result, prepareContract, { - evidenceResourcesAvailable: options.recordEvidence !== undefined, - }); + return toCallToolResult(result, prepareContract); }, ); server.registerTool( @@ -85,9 +83,7 @@ export const registerCharacterizationTools = ( sources, ); if (!recorded.ok) return toCallToolResult(recorded, executeContract); - return toCallToolResult(result, executeContract, { - evidenceResourcesAvailable: options.recordEvidence !== undefined, - }); + return toCallToolResult(result, executeContract); }, ); }; diff --git a/src/server/registerApplicationTools/controlledReplay.ts b/src/server/registerApplicationTools/controlledReplay.ts index c71888ee81..c5f18b23e0 100644 --- a/src/server/registerApplicationTools/controlledReplay.ts +++ b/src/server/registerApplicationTools/controlledReplay.ts @@ -47,10 +47,7 @@ export const registerControlledReplayTool = ( if (recorded !== undefined && !recorded.ok) return toCallToolResult(recorded, replayContract); } - return toCallToolResult(result, replayContract, { - evidenceResourcesAvailable: - output.phase === "execute" && options.recordEvidence !== undefined, - }); + return toCallToolResult(result, replayContract); }, ); }; diff --git a/src/server/registerApplicationTools/coverage.ts b/src/server/registerApplicationTools/coverage.ts index f625f2ac1d..8764f89e4f 100644 --- a/src/server/registerApplicationTools/coverage.ts +++ b/src/server/registerApplicationTools/coverage.ts @@ -19,7 +19,6 @@ import { err } from "../../domain/result.js"; import { logToolExecution } from "../toolLogging.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; -import { coverageWorkspaceUri } from "./helpers.js"; import type { ApplicationToolRegistration } from "./types.js"; const commitContract = applicationToolContract( @@ -78,19 +77,7 @@ const registerCommitTool = ( ); if (!result.ok) return toCallToolResult(result, commitContract); options.retainCoverageWorkspace?.(input.workspace); - return toCallToolResult(result, commitContract, { - resourceLinks: - options.retainCoverageWorkspace === undefined - ? [] - : [ - { - uri: coverageWorkspaceUri(input.workspace), - name: input.workspace.workspace_id, - description: - "Session-retained reconstruction coverage workspace revision", - }, - ], - }); + return toCallToolResult(result, commitContract); }, ); }; diff --git a/src/server/registerApplicationTools/helpers.ts b/src/server/registerApplicationTools/helpers.ts index 87ff725e2e..8bd5c150de 100644 --- a/src/server/registerApplicationTools/helpers.ts +++ b/src/server/registerApplicationTools/helpers.ts @@ -3,12 +3,6 @@ import type { Evidence } from "../../domain/evidence.js"; import { toCallToolResult } from "../toolResult.js"; import type { ApplicationToolRegistration } from "./types.js"; -export const coverageWorkspaceUri = (workspace: { - readonly workspace_id: string; - readonly revision: number; -}): string => - `rea://reconstruction-coverage/${workspace.workspace_id}/revision/${String(workspace.revision)}`; - export const recordResult = ( options: ApplicationToolRegistration, contract: (typeof APPLICATION_TOOL_CONTRACTS)[number], @@ -27,9 +21,7 @@ export const recordResult = ( ); if (recorded !== undefined && !recorded.ok) return toCallToolResult(recorded, contract); - return toCallToolResult({ ok: true, value: evidence }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + return toCallToolResult({ ok: true, value: evidence }, contract); }; const unknownRegistration = ( diff --git a/src/server/registerApplicationTools/readiness.ts b/src/server/registerApplicationTools/readiness.ts index eeb01e8da7..88674a72d6 100644 --- a/src/server/registerApplicationTools/readiness.ts +++ b/src/server/registerApplicationTools/readiness.ts @@ -6,7 +6,6 @@ import { resolveReconstructionReadinessRequest, } from "../../application/ReconstructionReadinessService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { reconstructionReadinessReportSchema } from "../../domain/reconstructionReadinessSchemas.js"; import { logToolExecution } from "../toolLogging.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; @@ -40,33 +39,7 @@ export const registerReconstructionReadinessTool = ( const recordedResult = options.recordEvidence?.(result.value); if (recordedResult !== undefined && !recordedResult.ok) return toCallToolResult(recordedResult, contract); - const report = reconstructionReadinessReportSchema.parse( - result.value.normalized_result, - ); - const reportUri = `rea://evidence/${result.value.evidence_id}/reconstruction-readiness-report`; - const projection = { - schema: report.schema, - schema_version: report.schema_version, - report_id: report.report_id, - source_digest: report.source_digest, - report_digest: report.report_digest, - status: report.status, - summary: report.summary, - metrics: report.metrics, - report_resource_uri: reportUri, - }; - return toCallToolResult({ ok: true, value: result.value }, contract, { - evidenceResourcesAvailable: recordedResult !== undefined, - evidenceResultProjection: projection, - evidenceTextProjection: projection, - resourceLinks: [ - { - uri: reportUri, - name: report.report_id, - description: "Full deterministic reconstruction readiness report", - }, - ], - }); + return toCallToolResult({ ok: true, value: result.value }, contract); }, ); }; diff --git a/src/server/registerBrowserScenarioTool.ts b/src/server/registerBrowserScenarioTool.ts index b408dc71e5..a60d712469 100644 --- a/src/server/registerBrowserScenarioTool.ts +++ b/src/server/registerBrowserScenarioTool.ts @@ -39,9 +39,7 @@ export const registerBrowserScenarioTool = ( const recorded = options.recordEvidence?.(result.value); return recorded !== undefined && !recorded.ok ? toCallToolResult(recorded, contract) - : toCallToolResult({ ok: true, value: result.value }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + : toCallToolResult({ ok: true, value: result.value }, contract); }, ); }; diff --git a/src/server/registerBrowserTools.ts b/src/server/registerBrowserTools.ts index 0c5158f248..cd3cbcef65 100644 --- a/src/server/registerBrowserTools.ts +++ b/src/server/registerBrowserTools.ts @@ -220,7 +220,5 @@ const evidenceResult = ( const recorded = options.recordEvidence?.(evidence); return recorded !== undefined && !recorded.ok ? toCallToolResult(recorded, contract) - : toCallToolResult({ ok: true, value: evidence }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + : toCallToolResult({ ok: true, value: evidence }, contract); }; diff --git a/src/server/registerElectronTools.ts b/src/server/registerElectronTools.ts index 75f0af834e..bdb826f943 100644 --- a/src/server/registerElectronTools.ts +++ b/src/server/registerElectronTools.ts @@ -16,10 +16,8 @@ import { ELECTRON_TOOL_CONTRACTS } from "../contracts/electronToolContracts.js"; import type { ToolContract } from "../contracts/toolContracts.js"; import type { AnalysisError } from "../domain/errors.js"; import type { Evidence } from "../domain/evidence.js"; -import type { JsonValue } from "../domain/jsonValue.js"; import type { Result } from "../domain/result.js"; import type { Logger } from "../logger.js"; -import { summarizeJavaScriptApplicationEvidence } from "./javascriptApplicationResult.js"; import { mcpProgressReporter } from "./mcpProgress.js"; import { logToolExecution } from "./toolLogging.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; @@ -98,22 +96,9 @@ export const registerElectronTools = ( runElectronTool( options, analyzeContract, - { - input, - context, - projectEvidence: (evidence, parsed) => { - const summary = summarizeJavaScriptApplicationEvidence(evidence); - return parsed.detail === "full" - ? { structured: evidence.normalized_result, text: summary } - : { structured: summary }; - }, - }, + { input, context }, (parsed, { signal, progress }) => - analyzeJavaScriptApplicationValidated( - options.permissionAuthority, - parsed, - { signal, progress }, - ), + analyzeJavaScriptApplicationValidated(parsed, { signal, progress }), ), ); server.registerTool( @@ -153,17 +138,13 @@ const runElectronTool = async ( request: { readonly input: Input; readonly context: ServerContext; - readonly projectEvidence?: ( - evidence: Evidence, - input: Input, - ) => { readonly structured: JsonValue; readonly text?: JsonValue }; }, execute: ( input: Input, context: ElectronToolContext, ) => Promise>, ) => { - const { input, context, projectEvidence } = request; + const { input, context } = request; const result = await logToolExecution(options.logger, contract.name, () => execute(input, { signal: context.mcpReq.signal, @@ -171,34 +152,16 @@ const runElectronTool = async ( }), ); if (!result.ok) return toCallToolResult(result, contract); - return evidenceResult( - options, - contract, - result.value, - projectEvidence?.(result.value, input), - ); + return evidenceResult(options, contract, result.value); }; const evidenceResult = ( options: ElectronToolRegistration, contract: ToolContract, evidence: Evidence, - projection: - | { readonly structured: JsonValue; readonly text?: JsonValue } - | undefined, ) => { const recorded = options.recordEvidence?.(evidence); return recorded !== undefined && !recorded.ok ? toCallToolResult(recorded, contract) - : toCallToolResult({ ok: true, value: evidence }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - ...(projection === undefined - ? {} - : { - evidenceResultProjection: projection.structured, - ...(projection.text === undefined - ? {} - : { evidenceTextProjection: projection.text }), - }), - }); + : toCallToolResult({ ok: true, value: evidence }, contract); }; diff --git a/src/server/registerEnhancedTools.ts b/src/server/registerEnhancedTools.ts index 2bfe9ee78b..f6c7091499 100644 --- a/src/server/registerEnhancedTools.ts +++ b/src/server/registerEnhancedTools.ts @@ -249,9 +249,7 @@ const executeEnhancedTool = async ( recordUnknown: registration.recordUnknown, }); if (!unknowns.ok) return toCallToolResult(unknowns, contract); - return toCallToolResult({ ok: true, value: evidence }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + return toCallToolResult({ ok: true, value: evidence }, contract); } return toCallToolResult(result, contract); }; @@ -315,7 +313,7 @@ const recordWorkflowUnknowns = ({ rationale: name === "inspect_native_api" ? "Confirm the unsupported boundary with a capable provider or ABI probe." - : "Continue with a larger bounded budget.", + : "Continue with a focused query or another available provider.", }, ], relationships: [], diff --git a/src/server/registerEvidenceResources.ts b/src/server/registerEvidenceResources.ts deleted file mode 100644 index 176b3fc8e5..0000000000 --- a/src/server/registerEvidenceResources.ts +++ /dev/null @@ -1,422 +0,0 @@ -import { - ResourceNotFoundError, - ResourceTemplate, - type McpServer, -} from "@modelcontextprotocol/server"; -import { createHash } from "node:crypto"; - -import canonicalize from "canonicalize"; -import type { BinarySessionPort } from "../application/BinarySessionPort.js"; -import type { JsonValue } from "../domain/jsonValue.js"; -import { registerJavaScriptApplicationGraphResource } from "./registerJavaScriptApplicationGraphResource.js"; -import { registerReconstructionObligationLedgerResource } from "./registerReconstructionObligationLedgerResource.js"; -import { registerReconstructionReadinessResource } from "./registerReconstructionReadinessResource.js"; -import { jsonResource } from "./resourceResult.js"; - -/** Expose immutable session-owned Evidence v2 records as MCP resources. */ -export const registerEvidenceResources = ( - server: McpServer, - session: BinarySessionPort, -): void => { - registerReconstructionCoverageResource(server, session); - registerInvestigationWorkspaceResource(server, session); - registerSessionEvidenceResource(server, session); - registerEvidenceBundleResource(server, session); - registerAnalysisSnapshotResource(server, session); - registerArtifactPageResource(server, session); - registerFunctionDossierResource(server, session); - registerEvidenceSectionResource(server, session); - registerReconstructionObligationLedgerResource(server, session); - registerReconstructionReadinessResource(server, session); - registerJavaScriptApplicationGraphResource(server, session); - registerResidualUnknownResource(server, session); - session.onAnalysisSnapshotChanged?.(() => { - void server.server - .sendResourceUpdated({ uri: "rea://snapshot/current" }) - .catch(() => undefined); - }); -}; - -const registerReconstructionCoverageResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "reconstruction-coverage-revision", - new ResourceTemplate( - "rea://reconstruction-coverage/{workspaceId}/revision/{revision}", - { - list: undefined, - }, - ), - { - title: "Reconstruction coverage revision", - description: - "Canonical CAS-linked surfaces, owners, claims, verifiers, evidence, and completion boundaries.", - mimeType: "application/json", - }, - (uri, variables) => { - const workspaceId = stringVariable(variables.workspaceId, uri.href); - const revisionText = stringVariable(variables.revision, uri.href); - if (!/^\d+$/u.test(revisionText)) - throw new ResourceNotFoundError(uri.href); - const workspace = session.reconstructionCoverageWorkspace( - workspaceId, - Number(revisionText), - ); - if (workspace === undefined) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, workspace); - }, - ); -}; - -const registerInvestigationWorkspaceResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "investigation-workspace-revision", - new ResourceTemplate("rea://workspace/{workspaceId}/revision/{revision}", { - list: undefined, - }), - { - title: "Investigation workspace revision", - description: "Immutable session-retained workspace with CAS linkage.", - mimeType: "application/json", - }, - (uri, variables) => { - const workspaceId = stringVariable(variables.workspaceId, uri.href); - const revisionText = stringVariable(variables.revision, uri.href); - if (!/^\d+$/u.test(revisionText)) - throw new ResourceNotFoundError(uri.href); - const workspace = session.investigationWorkspace( - workspaceId, - Number(revisionText), - ); - if (workspace === undefined) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, workspace); - }, - ); -}; - -const registerSessionEvidenceResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "session-evidence", - new ResourceTemplate("rea://evidence/{evidenceId}", { - list: undefined, - }), - { - title: "Session evidence", - description: "Immutable Evidence v2 records owned by this REA session.", - mimeType: "application/json", - }, - (uri, variables) => { - const evidenceId = variables.evidenceId; - if (typeof evidenceId !== "string") - throw new ResourceNotFoundError(uri.href); - const evidence = session.evidenceById(evidenceId); - if (evidence === undefined) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, evidence); - }, - ); -}; - -const registerEvidenceBundleResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "evidence-bundle", - new ResourceTemplate("rea://evidence-bundle/{bundleDigest}", { - list: undefined, - }), - { - title: "Evidence bundle", - description: "Immutable session-retained canonical Evidence v2 bundle.", - mimeType: "application/json", - }, - (uri, variables) => { - const digest = stringVariable(variables.bundleDigest, uri.href); - if (!/^[a-f0-9]{64}$/u.test(digest)) - throw new ResourceNotFoundError(uri.href); - const text = session.retainedEvidenceBundle(digest); - if (text === undefined) throw new ResourceNotFoundError(uri.href); - return { - contents: [ - { - uri: uri.href, - mimeType: "application/json", - text, - }, - ], - }; - }, - ); -}; - -const registerAnalysisSnapshotResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "analysis-snapshot", - "rea://snapshot/current", - { - title: "Analysis snapshot", - description: - "Mutable provider-neutral analysis snapshot for the current native target.", - mimeType: "application/json", - }, - (uri) => { - const snapshot = session.exportAnalysisSnapshot(); - if (!snapshot.ok) - return jsonResource(uri.href, { - state: "unavailable", - reason: snapshot.error.message, - remediation: - "Open a native target with a concrete analysis profile. After metadata mutation, call open_binary again for the current target to begin a fresh cache.", - }); - return jsonResource(uri.href, { - state: "available", - target: snapshot.value.target, - profile: snapshot.value.binding, - content_digest: contentDigest(snapshot.value), - entry_count: snapshot.value.entries.length, - snapshot: snapshot.value, - }); - }, - ); -}; - -const registerArtifactPageResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "artifact-page", - new ResourceTemplate("rea://artifact/{manifestId}/{collection}", { - list: undefined, - complete: { - collection: (prefix) => - ["nodes", "occurrences", "edges"].filter((value) => - value.startsWith(prefix), - ), - }, - }), - { - title: "Artifact graph page", - description: "Deterministically paged artifact graph collection.", - mimeType: "application/json", - }, - (uri, variables) => { - const manifestId = stringVariable(variables.manifestId, uri.href); - const collection = stringVariable(variables.collection, uri.href); - if (!ARTIFACT_COLLECTIONS.has(collection)) - throw new ResourceNotFoundError(uri.href); - const evidence = session - .exportEvidenceBundle() - .records.find( - (record) => - artifactManifestId(record.normalized_result) === manifestId, - ); - if (evidence === undefined) throw new ResourceNotFoundError(uri.href); - const result = objectValue(evidence.normalized_result); - const page = result?.[collection]; - if (page === undefined) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, { - evidence_id: evidence.evidence_id, - manifest_id: manifestId, - collection, - page, - provider: evidence.provider, - limitations: evidence.limitations, - }); - }, - ); -}; - -const registerFunctionDossierResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "function-dossier", - new ResourceTemplate("rea://function/{targetSha256}/{address}", { - list: undefined, - }), - { - title: "Function dossier", - description: "Session-owned analyze_function dossier with provenance.", - mimeType: "application/json", - }, - (uri, variables) => { - const targetSha256 = stringVariable(variables.targetSha256, uri.href); - const address = stringVariable(variables.address, uri.href); - const evidence = session - .exportEvidenceBundle() - .records.find( - (record) => - record.operation === "analyze_function" && - record.subject?.digest.sha256 === targetSha256 && - functionAddress(record.normalized_result) === address, - ); - if (evidence === undefined) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, evidence); - }, - ); -}; - -const registerEvidenceSectionResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "evidence-section", - new ResourceTemplate("rea://evidence/{evidenceId}/section/{section}", { - list: undefined, - complete: { - section: (prefix) => - EVIDENCE_SECTIONS.filter((section) => section.startsWith(prefix)), - }, - }), - { - title: "Evidence section", - description: - "One independently useful bounded section of session Evidence v2.", - mimeType: "application/json", - }, - (uri, variables) => { - const evidenceId = stringVariable(variables.evidenceId, uri.href); - const section = stringVariable(variables.section, uri.href); - const evidence = session.evidenceById(evidenceId); - if (evidence === undefined) throw new ResourceNotFoundError(uri.href); - const value = evidenceSection(evidence.normalized_result, section); - if (value === undefined) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, { - evidence_id: evidence.evidence_id, - operation: evidence.operation, - authority: evidence.authority, - confidence: evidence.confidence, - provider: evidence.provider, - limitations: evidence.limitations, - section, - value, - }); - }, - ); -}; - -const registerResidualUnknownResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "residual-unknown", - new ResourceTemplate("rea://unknown/{unknownId}", { - list: undefined, - }), - { - title: "Residual unknown", - description: "Current session-owned residual unknown head.", - mimeType: "application/json", - }, - (uri, variables) => { - const unknownId = stringVariable(variables.unknownId, uri.href); - const unknown = session - .listUnknowns() - .find(({ unknown_id }) => unknown_id === unknownId); - if (unknown === undefined) throw new ResourceNotFoundError(uri.href); - const history = session - .exportEvidenceBundle() - .unknowns.filter(({ unknown_id }) => unknown_id === unknownId); - return jsonResource(uri.href, { current: unknown, history }); - }, - ); -}; - -const EVIDENCE_SECTIONS = [ - "result", - "terminal", - "filesystem", - "process", - "protocol", - "nodes", - "occurrences", - "edges", -] as const; - -const stringVariable = (value: unknown, uri: string): string => { - if (typeof value !== "string") throw new ResourceNotFoundError(uri); - return value; -}; - -const evidenceSection = ( - result: JsonValue, - section: string, -): JsonValue | undefined => { - if (section === "result") return result; - if (typeof result !== "object" || result === null || Array.isArray(result)) - return undefined; - if (section === "terminal") - return pick(result, ["frames", "rendered_frames", "interaction_events"]); - if (section === "filesystem") - return pick(result, [ - "filesystem_checkpoints", - "filesystem_effects", - "files_before", - "files_after", - ]); - if (section === "process") - return pick(result, ["process_samples", "exit", "settlement", "cleanup"]); - if (section === "protocol") - return pick(result, [ - "protocol_events", - "replay_transitions", - "shim_events", - ]); - const value = result[section]; - return value === undefined ? undefined : value; -}; - -const pick = ( - result: Readonly>, - names: readonly string[], -): JsonValue | undefined => { - const entries = names.flatMap((name) => - result[name] === undefined ? [] : [[name, result[name]] as const], - ); - return entries.length === 0 ? undefined : Object.fromEntries(entries); -}; - -const ARTIFACT_COLLECTIONS = new Set(["nodes", "occurrences", "edges"]); - -const objectValue = ( - value: JsonValue, -): Readonly> | undefined => - typeof value === "object" && value !== null && !Array.isArray(value) - ? value - : undefined; - -const artifactManifestId = (value: JsonValue): string | undefined => { - const manifest = objectValue(objectValue(value)?.manifest ?? null); - return typeof manifest?.manifest_id === "string" - ? manifest.manifest_id - : undefined; -}; - -const functionAddress = (value: JsonValue): string | undefined => { - const result = objectValue(value); - const procedure = objectValue(result?.procedure ?? null); - const candidate = procedure?.address ?? result?.address; - return typeof candidate === "string" ? candidate : undefined; -}; - -const contentDigest = (value: JsonValue): string => { - const encoded = canonicalize(value); - if (encoded === undefined) - throw new TypeError("Resource is not canonical JSON"); - return createHash("sha256").update(encoded).digest("hex"); -}; diff --git a/src/server/registerEvidenceTools.ts b/src/server/registerEvidenceTools.ts index 7e26eb3f84..a808442f4e 100644 --- a/src/server/registerEvidenceTools.ts +++ b/src/server/registerEvidenceTools.ts @@ -29,7 +29,7 @@ interface EvidenceToolRegistration { ) => readonly Evidence[]; } -/** Register provider-backed contracts that return atomic Evidence v2 observations. */ +/** Register provider-backed contracts that return atomic Evidence observations. */ export const registerEvidenceTools = ( server: McpServer, analysis: AnalysisOperationPort, @@ -103,9 +103,7 @@ export const registerEvidenceTools = ( const recorded = options.recordEvidence?.(evidence); return recorded !== undefined && !recorded.ok ? toCallToolResult(recorded, contract) - : toCallToolResult({ ok: true, value: evidence }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + : toCallToolResult({ ok: true, value: evidence }, contract); }, ); } diff --git a/src/server/registerFunctionComparisonTool.ts b/src/server/registerFunctionComparisonTool.ts index 30b5fb1dd5..ba3f87fbfa 100644 --- a/src/server/registerFunctionComparisonTool.ts +++ b/src/server/registerFunctionComparisonTool.ts @@ -29,20 +29,24 @@ export const registerFunctionComparisonTool = ( }; const left = resolveSessionEvidenceIds( session, - input.left_evidence_ids, + [input.left_evidence_id], expected, ); if (!left.ok) return toCallToolResult(left, contract); const right = resolveSessionEvidenceIds( session, - input.right_evidence_ids, + [input.right_evidence_id], expected, ); if (!right.ok) return toCallToolResult(right, contract); - const leftIds = left.value.map(({ evidence_id: id }) => id); - const rightIds = right.value.map(({ evidence_id: id }) => id); + const leftEvidence = left.value[0]; + const rightEvidence = right.value[0]; + if (leftEvidence === undefined || rightEvidence === undefined) + throw new Error("Function comparison Evidence was not resolved"); + const leftIds = [leftEvidence.evidence_id]; + const rightIds = [rightEvidence.evidence_id]; const computed = await runDerivedOperation(context, contract.name, () => - compareFunctions(left.value, right.value, input.offset, input.limit), + compareFunctions(leftEvidence, rightEvidence), ); if (!computed.ok) return toCallToolResult(computed, contract); const comparison = computed.value; @@ -50,10 +54,8 @@ export const registerFunctionComparisonTool = ( predicateType: "rea.function-comparison/v1", operation: contract.name, parameters: { - left_evidence_ids: leftIds, - right_evidence_ids: rightIds, - offset: input.offset, - limit: input.limit, + left_evidence_id: leftEvidence.evidence_id, + right_evidence_id: rightEvidence.evidence_id, }, result: jsonValueSchema.parse(comparison), confidence: "derived", @@ -102,7 +104,7 @@ const functionUnknownInput = ({ { operation: "analyze_function", rationale: - "Capture complete dossiers for both functions under the same target context and analysis limits.", + "Capture complete dossiers for both functions under the same target context.", }, ], relationships: [], diff --git a/src/server/registerInvestigationTools.ts b/src/server/registerInvestigationTools.ts index 16e178de63..6ee10dc3a1 100644 --- a/src/server/registerInvestigationTools.ts +++ b/src/server/registerInvestigationTools.ts @@ -5,7 +5,6 @@ import type { BinarySessionPort } from "../application/BinarySession.js"; import { runCrossVersionInvestigationValidated } from "../application/CrossVersionInvestigation.js"; import { authorizeFileReadWithDeferredWrite, - authorizeRootPermission, type DeferredFileWriteAuthorization, } from "../application/DeferredFileAuthorization.js"; import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; @@ -15,11 +14,9 @@ import { changedBehaviorResultSchema, findChangedBehavior, } from "../domain/changedBehavior.js"; -import { type AnalysisError } from "../domain/errors.js"; import { createEvidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { verifyReconstruction } from "../domain/reconstructionVerification.js"; -import type { Result } from "../domain/result.js"; import { correlateStaticAndRuntime } from "../domain/staticRuntimeCorrelation.js"; import { mcpProgressReporter } from "./mcpProgress.js"; import { @@ -150,9 +147,6 @@ const runAutomaticInvestigation = async (input: { const { policies, investigationRun, contract, session } = input; const progress = mcpProgressReporter(input.context); let workspaceAuthorization: DeferredFileWriteAuthorization | undefined; - let authorizeInputRead: - | (() => Promise>) - | undefined; if (policies.permissionAuthority !== undefined) { const authority = policies.permissionAuthority; const authorizedWorkspace = await authorizeFileReadWithDeferredWrite( @@ -167,13 +161,6 @@ const runAutomaticInvestigation = async (input: { if (!authorizedWorkspace.ok) return toCallToolResult(authorizedWorkspace, contract); workspaceAuthorization = authorizedWorkspace.value; - authorizeInputRead = () => - authorizeRootPermission(authority, { - capability: "investigation_input", - roots: [investigationRun.left_path, investigationRun.right_path], - access: "read", - operation: contract.name, - }); } const investigated = await runCrossVersionInvestigationValidated( investigationRun, @@ -182,7 +169,6 @@ const runAutomaticInvestigation = async (input: { ...investigationContext({ session, signal: input.context.mcpReq.signal, - inputRoots: policies.inputRoots, integrityContinueEnabled: policies.integrityContinueEnabled?.() ?? false, progress, @@ -190,12 +176,10 @@ const runAutomaticInvestigation = async (input: { ...(workspaceAuthorization === undefined ? {} : { authorizeWorkspaceWrite: workspaceAuthorization.authorizeWrite }), - ...(authorizeInputRead === undefined ? {} : { authorizeInputRead }), }, ); if (!investigated.ok) return toCallToolResult(investigated, contract); - const workspace = investigated.value.workspace; - session.retainInvestigationWorkspace(workspace); + session.retainInvestigationWorkspace(investigated.value.workspace); const result = changedBehaviorResultSchema.parse( investigated.value.evidence.normalized_result, ); @@ -221,19 +205,7 @@ const runAutomaticInvestigation = async (input: { ), contract, ); - return { - ...toolResult, - content: [ - ...toolResult.content, - { - type: "resource_link" as const, - uri: `rea://workspace/${workspace.workspace_id}/revision/${String(workspace.revision)}`, - name: `${workspace.workspace_id} revision ${String(workspace.revision)}`, - description: "Immutable CAS-linked investigation workspace revision", - mimeType: "application/json", - }, - ], - }; + return toolResult; }; const registerCallPath = ( @@ -262,10 +234,6 @@ const registerCallPath = ( parameters: { start: input.start.address, goal: input.goal.address, - max_depth: input.max_depth, - max_paths: input.max_paths, - offset: input.offset, - limit: input.limit, }, result: jsonValueSchema.parse(result), confidence: "derived", @@ -277,7 +245,7 @@ const registerCallPath = ( session, evidence, input.unknown_registry_approved, - result.status === "unknown" || result.status === "truncated", + result.status === "unknown", { question: "Can the requested call path be established from complete analysis?", diff --git a/src/server/registerInvestigationTools/helpers.ts b/src/server/registerInvestigationTools/helpers.ts index d0c7ac02cd..6d126b0d2f 100644 --- a/src/server/registerInvestigationTools/helpers.ts +++ b/src/server/registerInvestigationTools/helpers.ts @@ -17,25 +17,21 @@ import { AnalysisInputError } from "../../domain/errors.js"; export const investigationContext = ({ session, signal, - inputRoots, integrityContinueEnabled, progress, }: { readonly session: BinarySessionPort; readonly signal: AbortSignal; - readonly inputRoots: readonly string[]; readonly integrityContinueEnabled: boolean; readonly progress?: ProgressReporter; }): { readonly session: BinarySessionPort; readonly signal: AbortSignal; - readonly inputRoots: readonly string[]; readonly integrityContinueEnabled: boolean; readonly progress?: ProgressReporter; } => ({ session, signal, - inputRoots, integrityContinueEnabled, ...(progress === undefined ? {} : { progress }), }); @@ -51,14 +47,8 @@ export const comparisonClosure = (comparisons: readonly Evidence[]): string[] => ]), ); -export const functionEvidenceIds = ( - groups: readonly (Evidence | readonly Evidence[])[], -): string[] => - uniqueIds( - groups.flatMap((group) => - (Array.isArray(group) ? group : [group]).map(({ evidence_id: id }) => id), - ), - ); +export const functionEvidenceIds = (records: readonly Evidence[]): string[] => + uniqueIds(records.map(({ evidence_id }) => evidence_id)); const uniqueIds = (ids: readonly string[]): string[] => [...new Set(ids)].sort((left, right) => left.localeCompare(right)); diff --git a/src/server/registerInvestigationTools/types.ts b/src/server/registerInvestigationTools/types.ts index 8326d0d6d8..78d18a8e59 100644 --- a/src/server/registerInvestigationTools/types.ts +++ b/src/server/registerInvestigationTools/types.ts @@ -4,7 +4,6 @@ import type { PermissionAuthority } from "../../application/PermissionAuthority. /** Policy inputs shared by all investigation workflow tools. */ export interface InvestigationToolPolicies { readonly evidenceFiles: EvidenceFilePolicy; - readonly inputRoots: readonly string[]; readonly permissionAuthority?: PermissionAuthority; readonly integrityContinueEnabled?: () => boolean; } diff --git a/src/server/registerJavaScriptApplicationGraphResource.ts b/src/server/registerJavaScriptApplicationGraphResource.ts deleted file mode 100644 index 4732483e03..0000000000 --- a/src/server/registerJavaScriptApplicationGraphResource.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { - ResourceNotFoundError, - ResourceTemplate, - type McpServer, -} from "@modelcontextprotocol/server"; - -import type { BinarySessionPort } from "../application/BinarySessionPort.js"; -import { javascriptApplicationAnalysisResultSchema } from "../domain/javascriptApplicationAnalysis.js"; -import { jsonResource } from "./resourceResult.js"; - -/** Register deterministic pages over one authenticated JavaScript graph. */ -export const registerJavaScriptApplicationGraphResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "javascript-application-graph-page", - new ResourceTemplate( - "rea://evidence/{evidenceId}/application-graph/{collection}/offset/{offset}/limit/{limit}", - { - list: undefined, - complete: { - collection: (prefix) => - ["nodes", "edges"].filter((name) => name.startsWith(prefix)), - }, - }, - ), - { - title: "JavaScript application graph page", - description: - "One deterministic bounded node or edge page from authenticated JavaScript application Evidence.", - mimeType: "application/json", - }, - (uri, variables) => { - const evidenceId = stringVariable(variables.evidenceId, uri.href); - const collection = stringVariable(variables.collection, uri.href); - if (collection !== "nodes" && collection !== "edges") - throw new ResourceNotFoundError(uri.href); - const offset = pageInteger(variables.offset, uri.href, 0, 100_000); - const limit = pageInteger(variables.limit, uri.href, 1, 500); - const evidence = session.evidenceById(evidenceId); - if ( - evidence === undefined || - evidence.operation !== "analyze_javascript_application" - ) - throw new ResourceNotFoundError(uri.href); - const analysis = javascriptApplicationAnalysisResultSchema.safeParse( - evidence.normalized_result, - ); - if (!analysis.success) throw new ResourceNotFoundError(uri.href); - const values = analysis.data.graph[collection]; - const items = values.slice(offset, offset + limit); - const nextOffset = offset + items.length; - return jsonResource(uri.href, { - evidence_id: evidence.evidence_id, - graph_id: analysis.data.graph.graph_id, - collection, - items, - offset, - limit, - total: values.length, - next_offset: nextOffset < values.length ? nextOffset : null, - has_more: nextOffset < values.length, - }); - }, - ); -}; - -const stringVariable = (value: unknown, uri: string): string => { - if (typeof value !== "string") throw new ResourceNotFoundError(uri); - return value; -}; - -const pageInteger = ( - value: unknown, - uri: string, - minimum: number, - maximum: number, -): number => { - const text = stringVariable(value, uri); - if (!/^\d+$/u.test(text)) throw new ResourceNotFoundError(uri); - const parsed = Number(text); - if (!Number.isSafeInteger(parsed) || parsed < minimum || parsed > maximum) - throw new ResourceNotFoundError(uri); - return parsed; -}; diff --git a/src/server/registerJavaScriptRuntimeObservationTools.ts b/src/server/registerJavaScriptRuntimeObservationTools.ts index c8e30a655e..7bcec11dd0 100644 --- a/src/server/registerJavaScriptRuntimeObservationTools.ts +++ b/src/server/registerJavaScriptRuntimeObservationTools.ts @@ -84,7 +84,5 @@ const runRuntimeTool = async ( const recorded = options.recordEvidence?.(result.value); return recorded !== undefined && !recorded.ok ? toCallToolResult(recorded, contract) - : toCallToolResult({ ok: true, value: result.value }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + : toCallToolResult({ ok: true, value: result.value }, contract); }; diff --git a/src/server/registerManagedWorkflowTools/compareManagedMembers.ts b/src/server/registerManagedWorkflowTools/compareManagedMembers.ts index afff19eb10..458e69b4dd 100644 --- a/src/server/registerManagedWorkflowTools/compareManagedMembers.ts +++ b/src/server/registerManagedWorkflowTools/compareManagedMembers.ts @@ -78,9 +78,6 @@ export const registerCompareManagedMembers = ( return toCallToolResult( { ok: true, value: result.value }, compareContract, - { - evidenceResourcesAvailable: output !== undefined, - }, ); }, ); diff --git a/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts b/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts index 3cca7ee491..43f030b1ed 100644 --- a/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts +++ b/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts @@ -49,9 +49,7 @@ export const registerImportManagedReconstruction = ( const recorded = options.recordEvidence?.(result.value); if (recorded !== undefined && !recorded.ok) return toCallToolResult(recorded, reconstructionContract); - return toCallToolResult(result, reconstructionContract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + return toCallToolResult(result, reconstructionContract); }, ); }; diff --git a/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts b/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts index 2e25f09bea..c9342f5889 100644 --- a/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts +++ b/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts @@ -51,9 +51,7 @@ export const registerPlanManagedRuntimeCorrelation = ( const recorded = options.recordEvidence?.(result.value); if (recorded !== undefined && !recorded.ok) return toCallToolResult(recorded, runtimeContract); - return toCallToolResult(result, runtimeContract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + return toCallToolResult(result, runtimeContract); }, ); }; diff --git a/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts b/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts index 5e84d1c05d..ec8b143dc7 100644 --- a/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts +++ b/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts @@ -54,7 +54,6 @@ export const registerProjectManagedApplicationGraph = ( if (managedBoundaries !== undefined && !managedBoundaries.ok) return toCallToolResult(managedBoundaries, graphContract); const parsed = { - limits: input.limits, managed_artifact: managedArtifact?.value[0], managed_members: managedMembers?.value[0], managed_native_boundaries: managedBoundaries?.value[0], @@ -74,9 +73,7 @@ export const registerProjectManagedApplicationGraph = ( const recorded = options.recordEvidence?.(result.value); if (recorded !== undefined && !recorded.ok) return toCallToolResult(recorded, graphContract); - return toCallToolResult(result, graphContract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + return toCallToolResult(result, graphContract); }, ); }; diff --git a/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts b/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts index c8b4ece1fe..75ee8619e2 100644 --- a/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts +++ b/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts @@ -101,9 +101,7 @@ export const registerVerifyManagedNativeBoundaries = ( : options.recordEvidence?.(result.value); if (output !== undefined && !output.ok) return toCallToolResult(output, nativeVerificationContract); - return toCallToolResult(result, nativeVerificationContract, { - evidenceResourcesAvailable: output !== undefined, - }); + return toCallToolResult(result, nativeVerificationContract); }, ); }; diff --git a/src/server/registerOfficialTools.ts b/src/server/registerOfficialTools.ts index c40bfbf00e..d633a1547f 100644 --- a/src/server/registerOfficialTools.ts +++ b/src/server/registerOfficialTools.ts @@ -108,9 +108,7 @@ const registerOfficialTool = ( const recorded = registration.recordEvidence?.(evidence); if (recorded !== undefined && !recorded.ok) return toCallToolResult(recorded, contract); - return toCallToolResult({ ok: true, value: evidence }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); + return toCallToolResult({ ok: true, value: evidence }, contract); }, ); }; diff --git a/src/server/registerProcessComparisonTool.ts b/src/server/registerProcessComparisonTool.ts index e3d3fd18f0..ce163612d0 100644 --- a/src/server/registerProcessComparisonTool.ts +++ b/src/server/registerProcessComparisonTool.ts @@ -20,7 +20,7 @@ import { toCallToolResult } from "./toolResult.js"; const PROCESS_CAPTURE_EVIDENCE = { operation: "capture_process_scenario", - predicate: "rea.process-capture/v4", + predicate: "rea.process-capture", } as const; const sourceLocations = ( @@ -80,17 +80,14 @@ export const registerProcessComparisonTool = ( new EvidenceIntegrityError( cause instanceof Error ? cause.message - : "Invalid Process Capture v4", + : "Invalid process capture", ), ), contract, ); } const evidence = createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: - input.trace_spec === undefined - ? "rea.process-comparison/v3" - : "rea.process-comparison/v4", + predicateType: "rea.process-comparison", operation: contract.name, parameters: { left_evidence_id: input.left_evidence_id, diff --git a/src/server/registerReconstructionObligationLedgerResource.ts b/src/server/registerReconstructionObligationLedgerResource.ts deleted file mode 100644 index 8365499a34..0000000000 --- a/src/server/registerReconstructionObligationLedgerResource.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - ResourceNotFoundError, - ResourceTemplate, - type McpServer, -} from "@modelcontextprotocol/server"; - -import type { BinarySessionPort } from "../application/BinarySessionPort.js"; -import { reconstructionObligationLedgerPageSchema } from "../domain/reconstructionObligationLedgerSchemas.js"; -import { jsonResource } from "./resourceResult.js"; - -/** Expose retained obligation-ledger pages as typed Evidence resources. */ -export const registerReconstructionObligationLedgerResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "reconstruction-obligation-ledger-page", - new ResourceTemplate( - "rea://evidence/{evidenceId}/reconstruction-obligation-ledger", - { - list: undefined, - }, - ), - { - title: "Reconstruction obligation ledger page", - description: - "One deterministic Evidence v2-backed obligation page with full-ledger closure digest and summaries.", - mimeType: "application/json", - }, - (uri, variables) => { - const evidenceId = variables.evidenceId; - if (typeof evidenceId !== "string") - throw new ResourceNotFoundError(uri.href); - const evidence = session.evidenceById(evidenceId); - if ( - evidence === undefined || - evidence.predicate_type !== "rea.reconstruction-obligation-ledger/v1" - ) - throw new ResourceNotFoundError(uri.href); - const page = reconstructionObligationLedgerPageSchema.safeParse( - evidence.normalized_result, - ); - if (!page.success) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, { - evidence_id: evidence.evidence_id, - page: page.data, - }); - }, - ); -}; diff --git a/src/server/registerReconstructionReadinessResource.ts b/src/server/registerReconstructionReadinessResource.ts deleted file mode 100644 index 05c744a666..0000000000 --- a/src/server/registerReconstructionReadinessResource.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - ResourceNotFoundError, - ResourceTemplate, - type McpServer, -} from "@modelcontextprotocol/server"; - -import type { BinarySessionPort } from "../application/BinarySessionPort.js"; -import { reconstructionReadinessReportSchema } from "../domain/reconstructionReadinessSchemas.js"; -import { jsonResource } from "./resourceResult.js"; - -/** Expose retained full readiness reports outside compact tool responses. */ -export const registerReconstructionReadinessResource = ( - server: McpServer, - session: BinarySessionPort, -): void => { - server.registerResource( - "reconstruction-readiness-report", - new ResourceTemplate( - "rea://evidence/{evidenceId}/reconstruction-readiness-report", - { - list: undefined, - }, - ), - { - title: "Reconstruction readiness report", - description: - "Full deterministic nine-stage conformance report and replay identity.", - mimeType: "application/json", - }, - (uri, variables) => { - const evidenceId = variables.evidenceId; - if (typeof evidenceId !== "string") - throw new ResourceNotFoundError(uri.href); - const evidence = session.evidenceById(evidenceId); - if ( - evidence === undefined || - evidence.predicate_type !== "rea.reconstruction-readiness-report/v1" - ) - throw new ResourceNotFoundError(uri.href); - const report = reconstructionReadinessReportSchema.safeParse( - evidence.normalized_result, - ); - if (!report.success) throw new ResourceNotFoundError(uri.href); - return jsonResource(uri.href, { - evidence_id: evidence.evidence_id, - report: report.data, - }); - }, - ); -}; diff --git a/src/server/registerSessionRecordTools.ts b/src/server/registerSessionRecordTools.ts index 00aeef3faf..069b41bc48 100644 --- a/src/server/registerSessionRecordTools.ts +++ b/src/server/registerSessionRecordTools.ts @@ -23,7 +23,6 @@ interface EvidenceToolRegistration { readonly exportContract: (typeof SESSION_TOOL_CONTRACTS)[3]; readonly importContract: (typeof SESSION_TOOL_CONTRACTS)[4]; readonly snapshotContract: (typeof SESSION_TOOL_CONTRACTS)[19]; - readonly releaseContract: (typeof SESSION_TOOL_CONTRACTS)[20]; readonly filePolicy: EvidenceFilePolicy; readonly permissionAuthority?: PermissionAuthority; } @@ -35,66 +34,6 @@ export const registerEvidenceTools = ( registerExportEvidenceTool(registration); registerImportEvidenceTool(registration); registerSnapshotEvidenceTool(registration); - registerReleaseEvidenceTool(registration); -}; - -const registerReleaseEvidenceTool = ({ - server, - session, - releaseContract, - permissionAuthority, -}: EvidenceToolRegistration): void => { - server.registerTool( - releaseContract.name, - toolRegistrationOptions(releaseContract), - async (input) => { - const denied = await authorizeEvidenceWrite({ - authority: permissionAuthority, - operationIdentity: `release_evidence:${input.bundle_digest}`, - }); - if (denied !== undefined) - return toCallToolResult(denied, releaseContract); - const released = session.releaseEvidenceBundle(input.bundle_digest); - if (released) - void server.server - .sendResourceUpdated({ - uri: `rea://evidence-bundle/${input.bundle_digest}`, - }) - .catch(() => undefined); - return toCallToolResult( - ok({ - bundle_digest: input.bundle_digest, - released, - }), - releaseContract, - ); - }, - ); -}; - -const authorizeEvidenceWrite = async ({ - authority, - operationIdentity, -}: { - readonly authority: PermissionAuthority | undefined; - readonly operationIdentity: string; -}): Promise | undefined> => { - if (authority === undefined) return undefined; - const authorized = await authority.authorize( - { - capability: "evidence_write", - roots: [], - executables: [], - environment_names: [], - network: "none", - mount: false, - operation_identity: operationIdentity, - }, - "write", - ); - return authorized.ok - ? undefined - : err(projectPermissionFailure(authorized.error)); }; const registerExportEvidenceTool = ({ @@ -146,29 +85,8 @@ const registerSnapshotEvidenceTool = ({ server.registerTool( snapshotContract.name, toolRegistrationOptions(snapshotContract), - () => { - const snapshot = session.snapshotEvidenceBundle(); - if (!snapshot.ok) return toCallToolResult(snapshot, snapshotContract); - const value = { - bundle_digest: snapshot.value.bundleDigest, - bundle_version: snapshot.value.bundleVersion, - bytes: snapshot.value.bytes, - records: snapshot.value.records, - unknowns: snapshot.value.unknowns, - scope: snapshot.value.scope, - survives_session: snapshot.value.survivesSession, - bundle_uri: snapshot.value.uri, - } as const; - return toCallToolResult(ok(value), snapshotContract, { - resourceLinks: [ - { - uri: snapshot.value.uri, - name: snapshot.value.bundleDigest, - description: "Immutable session-retained Evidence v2 bundle", - }, - ], - }); - }, + () => + toCallToolResult(ok(session.exportEvidenceBundle()), snapshotContract), ); }; @@ -275,33 +193,12 @@ const registerListUnknownsTool = ({ : { severity: filters.severity }), ...(filters.domain === undefined ? {} : { domain: filters.domain }), }); - const items = all - .slice(filters.offset, filters.offset + filters.limit) - .map((unknown) => ({ - unknown, - uri: `rea://unknown/${unknown.unknown_id}`, - })); - const nextOffset = - filters.offset + items.length < all.length - ? filters.offset + items.length - : null; return toCallToolResult( ok({ - items, - offset: filters.offset, - limit: filters.limit, + items: all, total: all.length, - next_offset: nextOffset, - has_more: nextOffset !== null, }), listContract, - { - resourceLinks: items.map((unknown) => ({ - uri: unknown.uri, - name: unknown.unknown.unknown_id, - description: `Current ${unknown.unknown.status} residual unknown revision`, - })), - }, ); }, ); @@ -318,17 +215,7 @@ const registerRecordUnknownTool = ({ toolRegistrationOptions(recordContract), (input) => { const result = session.recordUnknown(input); - return result.ok - ? toCallToolResult(result, recordContract, { - resourceLinks: [ - { - uri: `rea://unknown/${result.value.unknown_id}`, - name: result.value.unknown_id, - description: "Current residual unknown head", - }, - ], - }) - : toCallToolResult(result, recordContract); + return toCallToolResult(result, recordContract); }, ); }; @@ -344,23 +231,7 @@ const registerUpdateUnknownTool = ({ toolRegistrationOptions(updateContract), (input) => { const result = session.updateUnknown(input); - if (result.ok) - void server.server - .sendResourceUpdated({ - uri: `rea://unknown/${result.value.unknown_id}`, - }) - .catch(() => undefined); - return result.ok - ? toCallToolResult(result, updateContract, { - resourceLinks: [ - { - uri: `rea://unknown/${result.value.unknown_id}`, - name: result.value.unknown_id, - description: "Updated residual unknown head", - }, - ], - }) - : toCallToolResult(result, updateContract); + return toCallToolResult(result, updateContract); }, ); }; diff --git a/src/server/registerSessionStatusTool.ts b/src/server/registerSessionStatusTool.ts index be606df1f2..d10846e4eb 100644 --- a/src/server/registerSessionStatusTool.ts +++ b/src/server/registerSessionStatusTool.ts @@ -1,12 +1,8 @@ import type { McpServer } from "@modelcontextprotocol/server"; -import type { z } from "zod"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { buildCapabilityInventory } from "../application/CapabilityInventory.js"; -import { - binarySessionInputSchema, - SESSION_TOOL_CONTRACTS, -} from "../contracts/toolContracts.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; import { jsonObjectSchema } from "../domain/jsonValue.js"; import { createServerIdentity } from "../serverIdentity.js"; @@ -15,7 +11,6 @@ import type { SessionAvailability } from "./sessionAvailabilityPolicy.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; import { toCallToolResult } from "./toolResult.js"; -type BinarySessionInput = z.output; type ToolAvailability = ReturnType[number]; /** Inputs required to register the binary session status tool. */ @@ -65,7 +60,6 @@ export const registerSessionStatusTool = ( { ok: true, value: projectSessionStatus({ - input: input, status: statusObject, toolAvailability, serverIdentity, @@ -79,97 +73,16 @@ export const registerSessionStatusTool = ( }; const projectSessionStatus = (options: { - readonly input: BinarySessionInput; readonly status: Readonly< Record >; readonly toolAvailability: readonly ToolAvailability[]; readonly serverIdentity: ReturnType; readonly clientFeatures: ClientFeatureAvailability; -}) => { - if (options.input.detail === "full") - return jsonObjectSchema.parse({ - view: "full", - ...options.status, - tool_availability: options.toolAvailability, - client_features: options.clientFeatures, - server_identity: options.serverIdentity, - }); - const open = options.status.open === true; - const activeProvider = activeProviderFrom(options.status); - if (options.input.detail === "capabilities") { - const filtered = - options.input.capability_family === undefined - ? options.toolAvailability - : options.toolAvailability.filter( - ({ surface }) => surface === options.input.capability_family, - ); - const items = filtered.slice( - options.input.cursor, - options.input.cursor + options.input.limit, - ); - const nextCursor = options.input.cursor + items.length; - return jsonObjectSchema.parse({ - view: "capabilities", - open, - provider: options.status.provider, - active_provider: activeProvider, - capability_family: options.input.capability_family ?? null, - capabilities: { - items, - cursor: options.input.cursor, - limit: options.input.limit, - total: filtered.length, - next_cursor: nextCursor < filtered.length ? nextCursor : null, - has_more: nextCursor < filtered.length, - }, - client_features: options.clientFeatures, - }); - } - return jsonObjectSchema.parse({ - view: "summary", - open, - provider: options.status.provider, - active_provider: activeProvider, - target: open ? targetFrom(options.status) : null, - alignment: options.serverIdentity.alignment, - analysis_activity: options.status.analysis_activity, - recommended_actions: recommendedActions( - open, - options.serverIdentity.alignment.state, - ), +}) => + jsonObjectSchema.parse({ + ...options.status, + tool_availability: options.toolAvailability, + client_features: options.clientFeatures, + server_identity: options.serverIdentity, }); -}; - -const activeProviderFrom = ( - status: Readonly>, -) => { - const binding = jsonObjectSchema.safeParse(status.analysis_provider_binding); - return binding.success ? (binding.data.provider ?? null) : null; -}; - -const targetFrom = ( - status: Readonly>, -) => ({ - path: status.path, - format: status.format, - kind: status.kind, - sha256: status.sha256, - architecture: status.architecture ?? null, -}); - -const recommendedActions = ( - open: boolean, - alignment: string, -): readonly string[] => [ - ...(alignment === "mcp_server_restart_required" - ? ["Restart the registered MCP server or client before continuing."] - : []), - ...(!open - ? [ - "For a supplied target, route by format: ASAR/JavaScript to analyze_javascript_application; archive/package to open_binary(path), then inspect_artifact or inventory_artifact on the active target; managed PE/CLI to inspect_managed_artifact; browser/Electron runtimes to their list-target tools; native binaries to open_binary.", - ] - : [ - "Continue from the active target with binary_overview or a bounded target-specific query.", - ]), -]; diff --git a/src/server/registerSessionTools.ts b/src/server/registerSessionTools.ts index 01239d7a1e..40b5fa9995 100644 --- a/src/server/registerSessionTools.ts +++ b/src/server/registerSessionTools.ts @@ -281,7 +281,6 @@ const registerOpenLifecycleTool = ({ export interface SessionToolOptions { readonly processPolicy?: () => ProcessExecutionPolicy; readonly evidenceFilePolicy?: EvidenceFilePolicy; - readonly investigationInputRoots?: readonly string[]; readonly analysisSnapshotFilePolicy?: EvidenceFilePolicy; readonly startedAt?: string; readonly permissionAuthority?: PermissionAuthority; @@ -307,8 +306,8 @@ const registerContextTools = ( server: McpServer, session: BinarySessionPort, ): void => { - const navigationContract = SESSION_TOOL_CONTRACTS[21]; - const addressContract = SESSION_TOOL_CONTRACTS[22]; + const navigationContract = SESSION_TOOL_CONTRACTS[20]; + const addressContract = SESSION_TOOL_CONTRACTS[21]; server.registerTool( navigationContract.name, toolRegistrationOptions(navigationContract), @@ -359,7 +358,6 @@ export const registerSessionTools = ( reconstructionContract, ] = SESSION_TOOL_CONTRACTS; const snapshotContract = SESSION_TOOL_CONTRACTS[19]; - const releaseContract = SESSION_TOOL_CONTRACTS[20]; registerLifecycleTools({ server, session, @@ -370,7 +368,6 @@ export const registerSessionTools = ( availabilityPolicy: sessionAvailabilityPolicy(options.availabilityPolicy, { processPolicy: processPolicy(), evidenceFilePolicy, - investigationInputRoots: options.investigationInputRoots ?? [], }), ...(options.permissionAuthority === undefined ? {} @@ -382,7 +379,6 @@ export const registerSessionTools = ( exportContract, importContract, snapshotContract, - releaseContract, filePolicy: evidenceFilePolicy, ...(options.permissionAuthority === undefined ? {} @@ -418,7 +414,6 @@ export const registerSessionTools = ( ] as const; registerInvestigationTools(server, session, investigationContracts, { evidenceFiles: evidenceFilePolicy, - inputRoots: options.investigationInputRoots ?? [], ...(options.artifactIntegrityContinueEnabled === undefined ? {} : { diff --git a/src/server/resourceResult.ts b/src/server/resourceResult.ts deleted file mode 100644 index 45b02c1d4e..0000000000 --- a/src/server/resourceResult.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { JsonValue } from "../domain/jsonValue.js"; - -/** Encode one JSON value as an MCP resource with its requested URI. */ -export const jsonResource = (uri: string, value: JsonValue) => ({ - contents: [ - { - uri, - mimeType: "application/json" as const, - text: JSON.stringify(value, null, 2), - }, - ], -}); diff --git a/src/server/sessionAvailabilityPolicy.ts b/src/server/sessionAvailabilityPolicy.ts index ed77a947bd..51a85e1b87 100644 --- a/src/server/sessionAvailabilityPolicy.ts +++ b/src/server/sessionAvailabilityPolicy.ts @@ -7,7 +7,6 @@ export type SessionAvailability = AvailabilityPolicy; export interface SessionAvailabilityDefaults { readonly processPolicy: ProcessExecutionPolicy; readonly evidenceFilePolicy: EvidenceFilePolicy; - readonly investigationInputRoots: readonly string[]; readonly optionalFeatures?: Pick< SessionAvailability, | "browserObservationEnabled" @@ -29,7 +28,6 @@ export const sessionAvailabilityPolicy = ( (() => ({ processCaptureEnabled: defaults.processPolicy.status === "enabled", evidenceFileRoots: defaults.evidenceFilePolicy.roots.length, - investigationInputRoots: defaults.investigationInputRoots.length, browserObservationEnabled: defaults.optionalFeatures?.browserObservationEnabled ?? false, browserScenarioEnabled: diff --git a/src/server/toolResult.ts b/src/server/toolResult.ts index b59198051a..3b81e9f4b6 100644 --- a/src/server/toolResult.ts +++ b/src/server/toolResult.ts @@ -5,17 +5,6 @@ import { projectAnalysisError, type AnalysisError } from "../domain/errors.js"; import type { JsonValue } from "../domain/jsonValue.js"; import type { Result } from "../domain/result.js"; -interface ToolResultOptions { - readonly evidenceResourcesAvailable?: boolean; - readonly evidenceResultProjection?: JsonValue; - readonly evidenceTextProjection?: JsonValue; - readonly resourceLinks?: readonly { - readonly uri: string; - readonly name: string; - readonly description: string; - }[]; -} - /** * Translate an application result into MCP text content. * Error tags and safe messages remain visible while underlying causes, process @@ -24,11 +13,8 @@ interface ToolResultOptions { export const toCallToolResult = ( result: Result, contract: ToolContract, - options: ToolResultOptions = {}, ): CallToolResult => - result.ok - ? successResult(result.value, contract, options) - : errorResult(result.error); + result.ok ? successResult(result.value, contract) : errorResult(result.error); const errorResult = (error: AnalysisError): CallToolResult => { const projected = projectAnalysisError(error); @@ -48,62 +34,22 @@ const errorResult = (error: AnalysisError): CallToolResult => { const successResult = ( value: JsonValue, contract: ToolContract, - options: ToolResultOptions, ): CallToolResult => { const candidate = - compactEvidence(value, options.evidenceResultProjection) ?? + compactEvidence(value) ?? (contract.kind === "session" ? { result: value } : value); return { content: [ { type: "text", - text: JSON.stringify( - options.evidenceTextProjection === undefined - ? candidate - : (compactEvidence(value, options.evidenceTextProjection) ?? - options.evidenceTextProjection), - ), + text: JSON.stringify(candidate), }, - ...(hasResourceLinks(value, contract, options) - ? [ - { - type: "text" as const, - text: "Full detail is available through MCP resources/read. Copy the opaque URI exactly. In Codex, call read_mcp_resource.", - }, - ] - : []), - ...evidenceResourceLinks( - value, - contract.kind === "session" || - options.evidenceResourcesAvailable === true, - ), - ...(options.resourceLinks ?? []).map((resource) => ({ - type: "resource_link" as const, - ...resource, - mimeType: "application/json" as const, - })), ], structuredContent: candidate, }; }; -const hasResourceLinks = ( - value: JsonValue, - contract: ToolContract, - options: ToolResultOptions, -): boolean => - options.resourceLinks !== undefined && options.resourceLinks.length > 0 - ? true - : evidenceResourceLinks( - value, - contract.kind === "session" || - options.evidenceResourcesAvailable === true, - ).length > 0; - -const compactEvidence = ( - value: JsonValue, - resultProjection: JsonValue | undefined, -): JsonValue | undefined => { +const compactEvidence = (value: JsonValue): JsonValue | undefined => { if ( typeof value !== "object" || value === null || @@ -113,33 +59,17 @@ const compactEvidence = ( !("normalized_result" in value) ) return undefined; + const evidence = value as Record; + const normalizedResult = evidence.normalized_result; + const evidenceId = evidence.evidence_id; + if (normalizedResult === undefined || typeof evidenceId !== "string") + return undefined; + const inlineEvidence = Object.fromEntries( + Object.entries(evidence).filter(([key]) => key !== "normalized_result"), + ); return { - result: resultProjection ?? value.normalized_result, - evidence_id: value.evidence_id, - evidence_uri: `rea://evidence/${value.evidence_id}`, + result: normalizedResult, + evidence_id: evidenceId, + evidence: inlineEvidence, }; }; - -const evidenceResourceLinks = ( - value: JsonValue, - available: boolean, -): CallToolResult["content"] => { - if ( - !available || - typeof value !== "object" || - value === null || - Array.isArray(value) || - typeof value.evidence_id !== "string" || - !/^ev_[a-f0-9]{64}$/u.test(value.evidence_id) - ) - return []; - return [ - { - type: "resource_link", - uri: `rea://evidence/${value.evidence_id}`, - name: value.evidence_id, - description: "Session-owned Evidence v2 record", - mimeType: "application/json", - }, - ]; -}; diff --git a/src/serverIdentity.ts b/src/serverIdentity.ts index 3d7674f198..b36aeee5c7 100644 --- a/src/serverIdentity.ts +++ b/src/serverIdentity.ts @@ -78,7 +78,6 @@ export const createServerIdentity = (input: { protocol_features: { progress: true, cancellation: true, - evidence_resources: true, elicitation: false, }, alignment: { diff --git a/tests/acceptance/applications/applicationEvidenceMcp.test.ts b/tests/acceptance/applications/applicationEvidenceMcp.test.ts index 1e8bc1eeeb..5a554ab143 100644 --- a/tests/acceptance/applications/applicationEvidenceMcp.test.ts +++ b/tests/acceptance/applications/applicationEvidenceMcp.test.ts @@ -63,7 +63,7 @@ async function runInlineEvidenceScenarios( expect(traced.isError).not.toBe(true); expect(traced.structuredContent).toMatchObject({ result: { - schema_version: 1, + source_graph_id: expect.any(String), coverage: { status: expect.any(String) }, }, }); diff --git a/tests/acceptance/applications/applicationExportShapeMcp.test.ts b/tests/acceptance/applications/applicationExportShapeMcp.test.ts index 1926be1430..90f3f15049 100644 --- a/tests/acceptance/applications/applicationExportShapeMcp.test.ts +++ b/tests/acceptance/applications/applicationExportShapeMcp.test.ts @@ -10,7 +10,6 @@ import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; import { analyzeJavaScriptApplication } from "../../../src/application/JavaScriptApplicationService.js"; import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; -import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; describe("application workflow MCP parity", () => { it("compares exact parser export shapes through full Evidence and session IDs", async () => { @@ -28,19 +27,12 @@ describe("application workflow MCP parity", () => { join(rightRoot, "parser.mjs"), ), ]); - const authority = await permissionAuthorityForRoot( - root, - ["investigation_input"], - ["investigation_input"], - ); const [left, right] = await Promise.all([ - analyzeJavaScriptApplication(authority, { + analyzeJavaScriptApplication({ input_path: leftRoot, - approved: true, }), - analyzeJavaScriptApplication(authority, { + analyzeJavaScriptApplication({ input_path: rightRoot, - approved: true, }), ]); if (!left.ok) throw left.error; @@ -107,8 +99,6 @@ describe("application workflow MCP parity", () => { const analyzed = javascriptApplicationAnalysisResultSchema.parse( left.value.normalized_result, ); - if (analyzed.schema_version !== 2) - throw new TypeError("Expected semantic application Evidence"); const seed = analyzed.semantic_graph.relations[0]?.source_node_id; if (seed === undefined) throw new TypeError("Expected at least one semantic relation"); diff --git a/tests/acceptance/applications/applicationWorkflowCli.test.ts b/tests/acceptance/applications/applicationWorkflowCli.test.ts index 7fe90a5715..8726d01dfc 100644 --- a/tests/acceptance/applications/applicationWorkflowCli.test.ts +++ b/tests/acceptance/applications/applicationWorkflowCli.test.ts @@ -19,7 +19,6 @@ import { serializeEvidenceBundle, } from "../../../src/domain/evidenceBundle.js"; import { analyzeJavaScriptApplication } from "../../../src/application/JavaScriptApplicationService.js"; -import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; import { REPLAY_MACHINE_RUN_EXAMPLE } from "../../../src/contracts/replayMachineExample.js"; import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; @@ -43,7 +42,7 @@ describe("application workflow CLI parity", () => { ]); expect(traced).toMatchObject({ operation: "trace_application_feature", - normalized_result: { schema_version: 1 }, + normalized_result: { source_evidence_id: expect.any(String) }, }); const root = await createTestTempDirectory("rea-application-cli-"); @@ -86,21 +85,13 @@ describe("application workflow CLI parity", () => { join(root, "app.js"), "function add(value) { return value + 1; } add(2);", ); - const authority = await permissionAuthorityForRoot( - root, - ["investigation_input"], - ["investigation_input"], - ); - const analyzed = await analyzeJavaScriptApplication(authority, { + const analyzed = await analyzeJavaScriptApplication({ input_path: root, - approved: true, }); if (!analyzed.ok) throw analyzed.error; const result = javascriptApplicationAnalysisResultSchema.parse( analyzed.value.normalized_result, ); - if (result.schema_version !== 2) - throw new TypeError("Expected semantic application Evidence"); const seed = result.semantic_graph.relations[0]?.source_node_id; if (seed === undefined) throw new TypeError("Expected at least one semantic relation"); @@ -163,7 +154,7 @@ describe("application workflow CLI Evidence resolution", () => { ); expect(traced).toMatchObject({ operation: "trace_application_feature", - normalized_result: { schema_version: 1 }, + normalized_result: { source_evidence_id: expect.any(String) }, }); const compared = await runCli( @@ -244,19 +235,12 @@ describe("application workflow CLI export Evidence", () => { join(rightRoot, "parser.mjs"), ), ]); - const authority = await permissionAuthorityForRoot( - root, - ["investigation_input"], - ["investigation_input"], - ); const [left, right] = await Promise.all([ - analyzeJavaScriptApplication(authority, { + analyzeJavaScriptApplication({ input_path: leftRoot, - approved: true, }), - analyzeJavaScriptApplication(authority, { + analyzeJavaScriptApplication({ input_path: rightRoot, - approved: true, }), ]); if (!left.ok) throw left.error; diff --git a/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts b/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts index 69bc7f9ee3..5c6b9ab53d 100644 --- a/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts +++ b/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts @@ -20,7 +20,6 @@ import { buildSyntheticJavaScriptApplicationGraph, } from "../../../src/domain/javascriptApplicationGraph.fixture.js"; import { writeVersionedJavaScriptApplicationFixtures } from "../../fixtures/javascriptArtifactApplication.js"; -import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; const temporary: string[] = []; @@ -62,7 +61,6 @@ describe("JavaScript application workflows", () => { case_sensitive: false, }, direction: "outgoing", - limits: traceLimits(), }); expect(() => @@ -94,7 +92,7 @@ describe("JavaScript application workflows", () => { ).toBe(true); }); - it("keeps no-match and bounded frontiers explicit", () => { + it("keeps no-match explicit and traces the full reachable graph", () => { const graph = buildSyntheticJavaScriptApplicationGraph(); const noMatch = traceApplicationFeature({ sourceEvidenceId: `ev_${"a".repeat(64)}`, @@ -107,7 +105,6 @@ describe("JavaScript application workflows", () => { case_sensitive: false, }, direction: "both", - limits: traceLimits(), }); expect(noMatch).toMatchObject({ graph: null, @@ -115,7 +112,7 @@ describe("JavaScript application workflows", () => { summary: { matched_seeds: 0 }, }); - const bounded = traceApplicationFeature({ + const complete = traceApplicationFeature({ sourceEvidenceId: `ev_${"a".repeat(64)}`, graph, nativeEvidence: [], @@ -126,11 +123,11 @@ describe("JavaScript application workflows", () => { case_sensitive: false, }, direction: "outgoing", - limits: { ...traceLimits(), max_depth: 1 }, }); - expect(bounded.coverage).toMatchObject({ status: "truncated" }); - expect(bounded.coverage.omitted_nodes).toBeGreaterThan(0); - expect(bounded.summary.native_handoffs).toBe(0); + expect(complete.coverage.status).toBe("complete-within-source"); + expect(complete.coverage.total_seed_matches).toBe(1); + expect(complete.graph?.nodes.length).toBeGreaterThan(1); + expect(complete.coverage).not.toHaveProperty("omitted_nodes"); }); }); @@ -140,8 +137,8 @@ describe("JavaScript application comparison workflows", () => { temporary.push(root); const fixtures = await writeVersionedJavaScriptApplicationFixtures(root); const [left, right] = await Promise.all([ - analyzeFixture(fixtures.left, true), - analyzeFixture(fixtures.right, true), + analyzeFixture(fixtures.left), + analyzeFixture(fixtures.right), ]); const compared = compareApplicationVersionsEvidence({ left, right }); if (!compared.ok) throw compared.error; @@ -199,8 +196,8 @@ describe("JavaScript application comparison workflows", () => { temporary.push(root); const fixtures = await writeVersionedJavaScriptApplicationFixtures(root); const [left, right] = await Promise.all([ - analyzeFixture(fixtures.left, true), - analyzeFixture(fixtures.right, true), + analyzeFixture(fixtures.left), + analyzeFixture(fixtures.right), ]); const compared = compareApplicationVersionsEvidence({ left, right }); if (!compared.ok) throw compared.error; @@ -227,7 +224,6 @@ describe("JavaScript application comparison workflows", () => { if (rootNode === undefined) throw new Error("Synthetic graph root missing"); const partial = createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: [rootNode.node_id], nodes: [rootNode], edges: [], @@ -273,24 +269,9 @@ describe("JavaScript application comparison workflows", () => { }); }); -const traceLimits = () => ({ - max_seed_matches: 25, - max_depth: 12, - max_nodes: 2_000, - max_edges: 4_000, - max_paths: 100, -}); - -const analyzeFixture = async (root: string, sourceMaps = false) => { - const authority = await permissionAuthorityForRoot( - root, - ["investigation_input"], - ["investigation_input"], - ); - const result = await analyzeJavaScriptApplication(authority, { +const analyzeFixture = async (root: string) => { + const result = await analyzeJavaScriptApplication({ input_path: root, - approved: true, - source_map_read_approved: sourceMaps, }); if (!result.ok) throw result.error; return result.value; diff --git a/tests/acceptance/applications/runtime.test.ts b/tests/acceptance/applications/runtime.test.ts index 46d9efbf23..01365e11e0 100644 --- a/tests/acceptance/applications/runtime.test.ts +++ b/tests/acceptance/applications/runtime.test.ts @@ -19,7 +19,7 @@ const expectAvailableToolInventory = async (client: Client): Promise => { const listed = await client.listTools(); const status = await client.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }); const availability = z .object({ diff --git a/tests/boundary/browser/cdpBrowserProvider.discovery_authorization.test.ts b/tests/boundary/browser/cdpBrowserProvider.discovery_authorization.test.ts index b0c813d189..3183e6a2a6 100644 --- a/tests/boundary/browser/cdpBrowserProvider.discovery_authorization.test.ts +++ b/tests/boundary/browser/cdpBrowserProvider.discovery_authorization.test.ts @@ -9,6 +9,22 @@ import { startFakeCdpBrowser } from "../../fixtures/fakeCdpBrowser.js"; import { describeBrowser, trackBrowser } from "./cdpBrowserProvider.support.js"; describeBrowser("CdpBrowserProvider: discovery authorization 1", () => { + it("returns every approved page target inline", async () => { + const browser = await startFakeCdpBrowser({ additionalPageCount: 205 }); + trackBrowser(browser); + const listed = await new CdpBrowserProvider().listTargets( + listBrowserTargetsInputSchema.parse({ + cdp_endpoint: browser.endpoint, + allowed_origins: [browser.allowedOrigin], + approved: true, + }), + ); + if (!listed.ok) throw listed.error; + expect(listed.value.targets).toHaveLength(206); + expect(listed.value.targets[0]?.target_id).toBe("allowed-page"); + expect(listed.value.targets.at(-1)?.target_id).toBe("allowed-page-0204"); + }); + it("lists only exact-origin pages and sanitizes URLs", async () => { const browser = await startFakeCdpBrowser(); trackBrowser(browser); @@ -22,7 +38,7 @@ describeBrowser("CdpBrowserProvider: discovery authorization 1", () => { ); if (!result.ok) throw result.error; - expect(result.value.targets.items).toEqual([ + expect(result.value.targets).toEqual([ expect.objectContaining({ target_id: "allowed-page", origin: browser.allowedOrigin, @@ -60,7 +76,7 @@ describeBrowser("CdpBrowserProvider: discovery authorization 1", () => { listBrowserTargetsInputSchema.parse(input), ); if (!listed.ok) throw listed.error; - expect(listed.value.targets.items[0]?.title).toBe(expected); + expect(listed.value.targets[0]?.title).toBe(expected); const inspected = await provider.inspectPage( inspectWebPageInputSchema.parse({ ...input, observation_ms: 0 }), @@ -90,9 +106,10 @@ describeBrowser("CdpBrowserProvider: discovery authorization 1", () => { }), ); if (!listed.ok) throw listed.error; - expect( - listed.value.targets.items.map(({ target_id }) => target_id), - ).toEqual(["allowed-page", "allowed-page-with-socket"]); + expect(listed.value.targets.map(({ target_id }) => target_id)).toEqual([ + "allowed-page", + "allowed-page-with-socket", + ]); expect(listed.value.limitations).toContain( "1 otherwise allowed page target(s) lacked a validated direct CDP WebSocket and were excluded.", ); diff --git a/tests/boundary/browser/cdpElectronProvider.test.ts b/tests/boundary/browser/cdpElectronProvider.test.ts index b72e199338..c3b83809d3 100644 --- a/tests/boundary/browser/cdpElectronProvider.test.ts +++ b/tests/boundary/browser/cdpElectronProvider.test.ts @@ -29,6 +29,27 @@ afterEach(async () => { }); describe("CdpElectronProvider target access", () => { + it("returns every approved Electron page target inline", async () => { + const root = await electronFixture(); + const index = join(root, "index.html"); + const browser = await startFakeCdpBrowser({ + electronFileUrl: pathToFileURL(index).href, + additionalElectronPageCount: 205, + }); + browsers.push(browser); + const listed = await new CdpElectronProvider().listTargets( + listElectronTargetsInputSchema.parse({ + cdp_endpoint: browser.endpoint, + allowed_file_roots: [root], + approved: true, + }), + ); + if (!listed.ok) throw listed.error; + expect(listed.value.targets).toHaveLength(206); + expect(listed.value.targets[0]?.target_id).toBe("electron-page"); + expect(listed.value.targets.at(-1)?.target_id).toBe("electron-page-0204"); + }); + it("lists and inspects only canonical file targets beneath approved roots", async () => { const root = await electronFixture(); const index = join(root, "index.html"); @@ -46,7 +67,7 @@ describe("CdpElectronProvider target access", () => { }), ); if (!listed.ok) throw listed.error; - expect(listed.value.targets.items).toEqual([ + expect(listed.value.targets).toEqual([ expect.objectContaining({ target_id: "electron-page", file_path: index, diff --git a/tests/boundary/browser/javascriptRuntimeObservation.test.ts b/tests/boundary/browser/javascriptRuntimeObservation.test.ts index 042adb74ed..eb6b897de2 100644 --- a/tests/boundary/browser/javascriptRuntimeObservation.test.ts +++ b/tests/boundary/browser/javascriptRuntimeObservation.test.ts @@ -27,6 +27,28 @@ import { startFakeV8Inspector } from "../../fixtures/fakeV8Inspector.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; describe("passive V8 Inspector provider", () => { + test("returns every approved Inspector target inline", async () => { + const fixture = await runtimeFixture(); + const fake = await startFakeV8Inspector({ + targetUrl: pathToFileURL(fixture.entry).href, + additionalTargetCount: 205, + }); + try { + const listed = await new V8InspectorProvider().listTargets({ + inspector_endpoint: fake.endpoint, + allowed_file_roots: [fixture.root], + allowed_origins: [], + approved: true, + }); + expect(listed.ok).toBe(true); + if (!listed.ok) return; + expect(listed.value.targets).toHaveLength(206); + expect(listed.value.targets[0]?.target_id).toBe(fake.targetId); + } finally { + await fake.close(); + } + }); + test("filters target locations and never retains the excluded path", async () => { const fixture = await runtimeFixture(); const outside = await temporaryFile("outside.js"); @@ -40,12 +62,10 @@ describe("passive V8 Inspector provider", () => { allowed_file_roots: [fixture.root], allowed_origins: [], approved: true, - offset: 0, - limit: 100, }); expect(result.ok).toBe(true); if (!result.ok) return; - expect(result.value.targets.total).toBe(1); + expect(result.value.targets).toHaveLength(1); expect(result.value.excluded.outside_file_roots).toBe(1); expect(JSON.stringify(result.value)).not.toContain(outside); } finally { @@ -106,13 +126,10 @@ describe("passive V8 Inspector provider", () => { allowed_file_roots: [fixture.root], allowed_origins: [], approved: true, - offset: 0, - limit: 100, }); expect(listed.ok).toBe(true); if (!listed.ok) return; - expect(listed.value.targets.total).toBe(0); - expect(listed.value.targets.items).toEqual([]); + expect(listed.value.targets).toEqual([]); const observed = await provider.observe( observeInput( @@ -224,8 +241,6 @@ describe("passive V8 Inspector evidence", () => { allowed_file_roots: [fixture.root], allowed_origins: [], approved: true, - offset: 0, - limit: 100, }, ); expect(listed.ok).toBe(true); @@ -338,7 +353,6 @@ const runtimeObservation = ( targetPath: string, scriptPath: string, ): JavaScriptRuntimeObservation => ({ - schema_version: 1, runtime: { product: "node.js/v24.4.1", protocol_version: "1.3", diff --git a/tests/boundary/cli/browserCli.test.ts b/tests/boundary/cli/browserCli.test.ts index e4cffdae4a..eef1e0abf4 100644 --- a/tests/boundary/cli/browserCli.test.ts +++ b/tests/boundary/cli/browserCli.test.ts @@ -42,7 +42,7 @@ describe("browser CLI parity", () => { operation: "list_browser_targets", provider: { id: "rea-cdp-browser" }, normalized_result: { - targets: { items: [{ target_id: "allowed-page" }] }, + targets: [{ target_id: "allowed-page" }], }, }); const inspected = await runCli( @@ -358,7 +358,6 @@ const completeScenarioCapture = () => { completeness, }); return { - schema_version: 1, browser: { mode: "connect", process_ownership: "external", diff --git a/tests/boundary/cli/cliOutput.test.ts b/tests/boundary/cli/cliOutput.test.ts index c1a980becd..aaf3a5fbec 100644 --- a/tests/boundary/cli/cliOutput.test.ts +++ b/tests/boundary/cli/cliOutput.test.ts @@ -135,7 +135,7 @@ describe("compiled CLI output boundary", () => { 'code: VALIDATION_ERROR\nmessage: "REA could not read the command arguments. Run `rea --help`, correct the arguments, then try again."\n', }); const json = await cli.run({ - arguments: ["--full-output", "--json", "analyze"], + arguments: ["--json", "analyze"], }); expect(json).toMatchObject({ exitCode: 1, @@ -154,7 +154,7 @@ describe("compiled CLI output boundary", () => { ); workspaceCliTest( - "preserves artifact diagnostics in ordinary and full JSON output", + "preserves artifact diagnostics in JSON output", async ({ cli, workspace }) => { const source = workspace.path("source"); await mkdir(source); @@ -163,17 +163,15 @@ describe("compiled CLI output boundary", () => { await createPackageWithOptions(source, archive, { unpack: "*.js" }); await writeFile(join(`${archive}.unpacked`, "main.js"), "changed();\n"); - for (const flags of [["--json"], ["--full-output", "--json"]]) { - const result = await cli.run({ - arguments: [...flags, "inventory-artifact", archive], - }); - expect(result.exitCode).toBe(1); - const output = JSON.stringify(result.json); - expect(output).toContain('"logical_path":"main.js"'); - expect(output).toMatch(/"declared_sha256":"[a-f0-9]{64}"/u); - expect(output).toMatch(/"calculated_sha256":"[a-f0-9]{64}"/u); - expect(output).toContain('"unpacked":true'); - } + const result = await cli.run({ + arguments: ["--json", "inventory-artifact", archive], + }); + expect(result.exitCode).toBe(1); + const output = JSON.stringify(result.json); + expect(output).toContain('"logical_path":"main.js"'); + expect(output).toMatch(/"declared_sha256":"[a-f0-9]{64}"/u); + expect(output).toMatch(/"calculated_sha256":"[a-f0-9]{64}"/u); + expect(output).toContain('"unpacked":true'); }, CLI_INTEGRATION_TIMEOUT_MS, ); @@ -187,7 +185,6 @@ describe("compiled CLI output boundary", () => { ["--format", "yaml"], ["--format", "md"], ["--format", "jsonl"], - ["--full-output", "--json"], ["--filter-output", "category", "--json"], ["--token-limit", "5", "--json"], ["--token-count", "--json"], diff --git a/tests/boundary/cli/electronCli.test.ts b/tests/boundary/cli/electronCli.test.ts index 20f6f99b56..a5ed0675d2 100644 --- a/tests/boundary/cli/electronCli.test.ts +++ b/tests/boundary/cli/electronCli.test.ts @@ -57,7 +57,7 @@ describe("Electron CLI parity", () => { expect(listed).toMatchObject({ operation: "list_electron_targets", normalized_result: { - targets: { items: [{ target_id: "electron-page" }] }, + targets: [{ target_id: "electron-page" }], }, }); const inspected = await runCli( @@ -91,11 +91,10 @@ describe("Electron CLI parity", () => { await writeElectronBoundaryFixture(root); const environment = { ...process.env, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([root]), }; const analyzed = await runCli( - ["analyze-javascript-application", root, "--approved", "--json"], + ["analyze-javascript-application", root, "--json"], environment, ); @@ -125,7 +124,6 @@ describe("Electron CLI artifact behavior", () => { await writeElectronBoundaryFixture(root); const environment = { ...process.env, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([root]), }; const analyzed = await runCli( @@ -134,7 +132,6 @@ describe("Electron CLI artifact behavior", () => { "json", "analyze-javascript-application", root, - "--approved", "--artifact-format", "directory", ], @@ -150,20 +147,16 @@ describe("Electron CLI artifact behavior", () => { ); it( - "routes generic approved analysis of a directory to static JavaScript", + "routes generic directory analysis to static JavaScript", async () => { const root = await createTestTempDirectory("rea-electron-routed-cli-"); temporary.push(root); await writeElectronBoundaryFixture(root); const environment = { ...process.env, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([root]), }; - const analyzed = await runCli( - ["analyze", root, "--approved", "--json"], - environment, - ); + const analyzed = await runCli(["analyze", root, "--json"], environment); expect(analyzed).toMatchObject({ operation: "analyze_javascript_application", @@ -177,39 +170,6 @@ describe("Electron CLI artifact behavior", () => { }, INTEGRATION_TEST_TIMEOUT_MS, ); - - it( - "requires explicit approval before generic JavaScript analysis", - async () => { - const root = await createTestTempDirectory( - "rea-electron-unapproved-cli-", - ); - temporary.push(root); - await writeElectronBoundaryFixture(root); - const environment = { - ...process.env, - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([root]), - }; - - const denied = await runCli(["analyze", root, "--json"], environment); - - expect(denied).toMatchObject({ - code: "invalid_request", - details: { - operation: "analyze_javascript_application", - issues: [ - { - path: ["approved"], - reason: "invalid_value", - expected: [true], - }, - ], - }, - }); - expect(denied).not.toHaveProperty("details.candidate_ids"); - }, - INTEGRATION_TEST_TIMEOUT_MS, - ); }); describe("Electron CLI runtime reconciliation", () => { @@ -232,7 +192,6 @@ describe("Electron CLI runtime reconciliation", () => { operation: "reconcile_javascript_runtime", provider: { id: "rea-javascript-runtime-reconciliation" }, normalized_result: { - schema_version: 1, summary: { runtime_scripts: 1, matched: 1 }, source_map_authority: { used_for_primary_matching: false }, }, diff --git a/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts b/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts index a7e7fb1ec0..8117e87764 100644 --- a/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts +++ b/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts @@ -60,7 +60,7 @@ describe("JavaScript runtime observation CLI parity", () => { operation: "list_javascript_runtime_targets", provider: { id: "rea-v8-inspector" }, normalized_result: { - targets: { items: [{ target_id: inspector.targetId }] }, + targets: [{ target_id: inspector.targetId }], }, }); diff --git a/tests/boundary/cli/processCli.test.ts b/tests/boundary/cli/processCli.test.ts index a5ecb00252..74a8dd0c04 100644 --- a/tests/boundary/cli/processCli.test.ts +++ b/tests/boundary/cli/processCli.test.ts @@ -134,15 +134,15 @@ describe("process CLI errors", () => { }); }); - it("explains unsupported and unrelated capture evidence", async () => { + it("rejects unrelated capture evidence", async () => { const root = await fixture(); - const legacy = join(root, "legacy.json"); + const invalidCapture = join(root, "invalid-capture.json"); const unrelated = join(root, "unrelated.json"); await writeFile( - legacy, + invalidCapture, JSON.stringify( createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-capture/v3", + predicateType: "rea.process-capture/other", operation: "capture_process_scenario", parameters: {}, result: {}, @@ -161,14 +161,12 @@ describe("process CLI errors", () => { ), ); - const legacyResult = await compareProcessEvidenceFiles(legacy, legacy); - expect(legacyResult).toMatchObject({ + expect( + await compareProcessEvidenceFiles(invalidCapture, invalidCapture), + ).toMatchObject({ error: "Process command failed", category: "invalid_input", }); - expect(JSON.stringify(legacyResult)).toContain( - "Process Capture v3 is unsupported", - ); expect(await compareProcessEvidenceFiles(unrelated, unrelated)).toEqual({ error: "Process command failed", category: "invalid_input", diff --git a/tests/boundary/cli/productCatalog.test.ts b/tests/boundary/cli/productCatalog.test.ts index 05cef8a805..b88d522780 100644 --- a/tests/boundary/cli/productCatalog.test.ts +++ b/tests/boundary/cli/productCatalog.test.ts @@ -3,7 +3,6 @@ import { join } from "node:path"; import { fileURLToPath } from "node:url"; import { afterEach, describe, expect, it } from "vitest"; -import { z } from "zod"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; @@ -24,8 +23,6 @@ import { V8_INSPECTOR_PROVIDER_IDENTITY } from "../../../src/browser/V8Inspector import { CLI_COMMAND_NAMES } from "../../../src/cliCommandNames.js"; import { createCli } from "../../../src/cli.js"; import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; -import { analysisSnapshotSchema } from "../../../src/domain/analysisSnapshot.js"; -import { investigationWorkspaceSchema } from "../../../src/domain/investigationWorkspace.js"; import { HOPPER_PROVIDER_IDENTITY, HOPPER_PROVIDER_TOOL_CONTRACTS, @@ -150,19 +147,6 @@ describe("canonical product catalog", () => { expect(catalog.runtime_catalog.digests.providers_sha256).toBe( providerCatalogDigest(catalog.providers), ); - expect( - z.toJSONSchema(analysisSnapshotSchema).properties?.snapshot_version, - ).toMatchObject({ - const: catalog.schemas.find(({ id }) => id === "analysis_snapshot") - ?.version, - }); - expect( - z.toJSONSchema(investigationWorkspaceSchema).properties - ?.workspace_version, - ).toMatchObject({ - const: catalog.schemas.find(({ id }) => id === "investigation_workspace") - ?.version, - }); expect( JSON.parse(await readFile("docs/product-catalog.json", "utf8")), ).toEqual(catalog); @@ -207,7 +191,7 @@ describe("canonical CLI catalog", () => { }); describe("canonical product catalog drift", () => { - it("reports tool-family, setup-client, and schema fact drift", async () => { + it("reports tool-family and setup-client fact drift", async () => { const catalog = await createProductCatalog(root); const firstFamily = catalog.tools.families[0]; if (firstFamily === undefined) throw new TypeError("Missing tool family"); @@ -229,20 +213,12 @@ describe("canonical product catalog drift", () => { configuration: "managed", }, ], - schemas: catalog.schemas.map((schema) => - schema.id === "process_capture" - ? { ...schema, version: Number(schema.version) + 1 } - : schema, - ), }; const issues = await documentationFactIssues(root, drifted); expect(issues.some((issue) => issue.includes("tool family counts"))).toBe( true, ); expect(issues.some((issue) => issue.includes("Future Client"))).toBe(true); - expect(issues.some((issue) => issue.includes("Process Capture v5"))).toBe( - true, - ); }); it("changes the provider projection digest when provider facts drift", async () => { diff --git a/tests/boundary/cli/reconstructionObligationLedgerCli.test.ts b/tests/boundary/cli/reconstructionObligationLedgerCli.test.ts index ef4f1d1280..0687d0435a 100644 --- a/tests/boundary/cli/reconstructionObligationLedgerCli.test.ts +++ b/tests/boundary/cli/reconstructionObligationLedgerCli.test.ts @@ -13,11 +13,9 @@ describe("reconstruction obligation ledger CLI parity", () => { evidence_bundle: createEvidenceBundle([]), reviewed_obligations: [], manifest: { - schema_version: 1, bindings: [], contradictions: [], }, - limits: { max_obligations: 100 }, page: { offset: 0, limit: 50 }, }; const { stdout } = await execute( diff --git a/tests/boundary/filesystem/artifactInventorySnapshot.test.ts b/tests/boundary/filesystem/artifactInventorySnapshot.test.ts index 44850fe757..82798bc087 100644 --- a/tests/boundary/filesystem/artifactInventorySnapshot.test.ts +++ b/tests/boundary/filesystem/artifactInventorySnapshot.test.ts @@ -5,10 +5,7 @@ import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; -import { - paginateArtifactInventory, - scanArtifactInventory, -} from "../../../src/application/ArtifactInventory.js"; +import { scanArtifactInventory } from "../../../src/application/ArtifactInventory.js"; const LIMITS = { maxEntries: 10, @@ -20,37 +17,18 @@ const LIMITS = { } as const; describe("artifact inventory snapshot", () => { - it("projects every page from the same completed scan", async () => { + it("retains the complete scan after the source directory changes", async () => { const root = await createTestTempDirectory("rea-inventory-snapshot-"); await writeFile(join(root, "a.txt"), "a"); await writeFile(join(root, "b.txt"), "b"); const snapshot = await scanArtifactInventory(root, LIMITS); await rm(join(root, "b.txt")); - const first = paginateArtifactInventory(snapshot, { - nodeOffset: 0, - nodeLimit: 1, - occurrenceOffset: 0, - occurrenceLimit: 2, - edgeOffset: 0, - edgeLimit: 1, - }); - const second = paginateArtifactInventory(snapshot, { - nodeOffset: 1, - nodeLimit: 10, - occurrenceOffset: 2, - occurrenceLimit: 2, - edgeOffset: 1, - edgeLimit: 10, - }); - - expect(first.manifest).toEqual(second.manifest); - expect( - [...first.occurrences.items, ...second.occurrences.items].map( - ({ logical_path: path }) => path, - ), - ).toEqual([".", "a.txt", "b.txt"]); - expect(first.occurrences.total).toBe(3); - expect(second.occurrences.total).toBe(3); + expect(snapshot.occurrences.map(({ logical_path: path }) => path)).toEqual([ + ".", + "a.txt", + "b.txt", + ]); + expect(snapshot.manifest.occurrence_count).toBe(3); }); }); diff --git a/tests/boundary/filesystem/authorizedArtifactInventory.test.ts b/tests/boundary/filesystem/authorizedArtifactInventory.test.ts index 7b864132bb..0855ca7c65 100644 --- a/tests/boundary/filesystem/authorizedArtifactInventory.test.ts +++ b/tests/boundary/filesystem/authorizedArtifactInventory.test.ts @@ -17,15 +17,11 @@ const LIMITS = { } as const; describe("authorized artifact inventory", () => { - it("uses a valid input root when another configured root is missing", async () => { + it("scans a local artifact without configured input roots", async () => { const root = await createTestTempDirectory("rea-artifact-roots-"); const path = join(root, "artifact.js"); await writeFile(path, "export const value = 1;\n"); - const inventory = await scanAuthorizedArtifactInventory( - path, - [join(root, "missing"), root], - LIMITS, - ); + const inventory = await scanAuthorizedArtifactInventory(path, LIMITS); expect(inventory.manifest.root_format).toBe("javascript-bundle"); }); }); diff --git a/tests/boundary/filesystem/investigationWorkspaceHistory.test.ts b/tests/boundary/filesystem/investigationWorkspaceHistory.test.ts index 75cb4a8882..293b38aaef 100644 --- a/tests/boundary/filesystem/investigationWorkspaceHistory.test.ts +++ b/tests/boundary/filesystem/investigationWorkspaceHistory.test.ts @@ -96,7 +96,7 @@ describe("persistent cross-version investigation workspace", () => { const completed = await runCrossVersionInvestigation( input, policy(directory), - { inputRoots: [directory] }, + {}, ); if (!completed.ok) throw completed.error; @@ -116,7 +116,7 @@ describe("persistent cross-version investigation workspace", () => { const completed = await runCrossVersionInvestigation( input, policy(directory), - { inputRoots: [directory] }, + {}, ); if (!completed.ok) throw completed.error; const run = completed.value.workspace.runs[0]; @@ -162,7 +162,7 @@ describe("persistent cross-version investigation workspace", () => { replay_run_id: partialRun.run_id, }, policy(directory), - { inputRoots: [], authorizeInputRead: replayAuthorization }, + {}, ), ).resolves.toMatchObject({ ok: false, @@ -176,7 +176,7 @@ describe("persistent cross-version investigation workspace", () => { const resumed = await runCrossVersionInvestigation( { ...input, workspace_path: resumePath }, policy(directory), - { inputRoots: [directory] }, + {}, ); expect(resumed).toMatchObject({ ok: true, @@ -192,9 +192,11 @@ describe("persistent cross-version investigation workspace", () => { describe("persistent investigation workspace history", () => { it("appends a changed-content run without replacing earlier Evidence", async () => { const { directory, right, input } = await fixture(); - const first = await runCrossVersionInvestigation(input, policy(directory), { - inputRoots: [directory], - }); + const first = await runCrossVersionInvestigation( + input, + policy(directory), + {}, + ); if (!first.ok) throw first.error; const firstRun = first.value.workspace.runs[0]; if (firstRun === undefined || firstRun.result_evidence_id === null) @@ -204,7 +206,7 @@ describe("persistent investigation workspace history", () => { const second = await runCrossVersionInvestigation( input, policy(directory), - { inputRoots: [directory] }, + {}, ); expect(second).toMatchObject({ ok: true, @@ -251,7 +253,7 @@ describe("persistent investigation workspace history", () => { const strict = await runCrossVersionInvestigation( crossVersionInvestigationInputSchema.parse(base), policy(directory), - { inputRoots: [directory] }, + {}, ); expect(strict).toMatchObject({ ok: false, @@ -268,7 +270,7 @@ describe("persistent investigation workspace history", () => { const continued = await runCrossVersionInvestigation( continuedInput, policy(directory), - { inputRoots: [directory], integrityContinueEnabled: true }, + { integrityContinueEnabled: true }, ); expect(continued).toMatchObject({ ok: true, @@ -289,7 +291,6 @@ describe("persistent investigation workspace history", () => { ).toMatchObject({ status: "contradiction" }); await expect( runCrossVersionInvestigation(continuedInput, policy(directory), { - inputRoots: [directory], integrityContinueEnabled: true, }), ).resolves.toMatchObject({ ok: true, value: { reused: true } }); @@ -299,9 +300,11 @@ describe("persistent investigation workspace history", () => { workspace_path: continuedInput.workspace_path, }); await expect( - runCrossVersionInvestigation(strictAfterContinuation, policy(directory), { - inputRoots: [directory], - }), + runCrossVersionInvestigation( + strictAfterContinuation, + policy(directory), + {}, + ), ).resolves.toMatchObject({ ok: false, error: { _tag: "ArtifactOperationError", reason: "integrity" }, diff --git a/tests/boundary/filesystem/investigationWorkspaceIntegrity.test.ts b/tests/boundary/filesystem/investigationWorkspaceIntegrity.test.ts index 8ffac0aae8..1542b25b23 100644 --- a/tests/boundary/filesystem/investigationWorkspaceIntegrity.test.ts +++ b/tests/boundary/filesystem/investigationWorkspaceIntegrity.test.ts @@ -55,9 +55,7 @@ describe("persistent cross-version investigation workspace", () => { mode: 0o600, }); expect( - await runCrossVersionInvestigation(input, policy(directory), { - inputRoots: [directory], - }), + await runCrossVersionInvestigation(input, policy(directory), {}), ).toMatchObject({ ok: false, error: { _tag: "InvestigationWorkspaceError", reason: "locked" }, @@ -65,9 +63,7 @@ describe("persistent cross-version investigation workspace", () => { await rm(`${path}.lock`); await writeFile(`${path}.lock`, "occupied\n", { mode: 0o600 }); expect( - await runCrossVersionInvestigation(input, policy(directory), { - inputRoots: [directory], - }), + await runCrossVersionInvestigation(input, policy(directory), {}), ).toMatchObject({ ok: false, error: { _tag: "InvestigationWorkspaceError", reason: "locked" }, @@ -77,7 +73,7 @@ describe("persistent cross-version investigation workspace", () => { const completed = await runCrossVersionInvestigation( input, policy(directory), - { inputRoots: [directory] }, + {}, ); if (!completed.ok) throw completed.error; await expect(stat(`${path}.lock`)).rejects.toMatchObject({ @@ -87,7 +83,7 @@ describe("persistent cross-version investigation workspace", () => { await runCrossVersionInvestigation( { ...input, expected_workspace_revision: 2 }, policy(directory), - { inputRoots: [directory] }, + {}, ), ).toMatchObject({ ok: false, @@ -116,7 +112,7 @@ describe("persistent cross-version investigation workspace", () => { await runCrossVersionInvestigation( { ...input, workspace_path: cancelledPath }, policy(directory), - { inputRoots: [directory], signal: controller.signal }, + { signal: controller.signal }, ), ).toMatchObject({ ok: false, @@ -129,9 +125,7 @@ describe("persistent cross-version investigation workspace", () => { const approved = join(directory, "approved"); await mkdir(approved); expect( - await runCrossVersionInvestigation(input, policy(approved), { - inputRoots: [directory], - }), + await runCrossVersionInvestigation(input, policy(approved), {}), ).toMatchObject({ ok: false, error: { @@ -148,26 +142,11 @@ describe("persistent cross-version investigation workspace", () => { await runCrossVersionInvestigation( { ...input, workspace_path: escaped }, policy(approved), - { inputRoots: [directory] }, + {}, ), ).toMatchObject({ ok: false, error: { _tag: "InvestigationWorkspaceError", reason: "not-file" }, }); }); - - it("rejects artifact inputs outside independently approved roots", async () => { - const { directory, input, path } = await fixture(); - const approvedInputs = join(directory, "approved-inputs"); - await mkdir(approvedInputs); - expect( - await runCrossVersionInvestigation(input, policy(directory), { - inputRoots: [approvedInputs], - }), - ).toMatchObject({ - ok: false, - error: { _tag: "ArtifactOperationError", reason: "path" }, - }); - await expect(stat(path)).rejects.toMatchObject({ code: "ENOENT" }); - }); }); diff --git a/tests/boundary/filesystem/investigationWorkspaceMigration.test.ts b/tests/boundary/filesystem/investigationWorkspaceMigration.test.ts index 3cda2217a8..8d9ab9d82a 100644 --- a/tests/boundary/filesystem/investigationWorkspaceMigration.test.ts +++ b/tests/boundary/filesystem/investigationWorkspaceMigration.test.ts @@ -2,7 +2,7 @@ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises"; import { createHash } from "node:crypto"; import { join } from "node:path"; -import { describe, expect, it, vi } from "vitest"; +import { describe, expect, it } from "vitest"; import canonicalize from "canonicalize"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; @@ -21,7 +21,6 @@ import { parseInvestigationWorkspace, serializeInvestigationWorkspace, } from "../../../src/domain/investigationWorkspace.js"; -import { ok } from "../../../src/domain/result.js"; const digestCanonical = (value: unknown): string => { const encoded = canonicalize(value); @@ -65,7 +64,7 @@ describe("persistent cross-version investigation workspace", () => { const completed = await runCrossVersionInvestigation( input, policy(directory), - { inputRoots: [directory] }, + {}, ); if (!completed.ok) throw completed.error; const current = completed.value.workspace; @@ -159,7 +158,7 @@ describe("persistent cross-version investigation workspace", () => { runCrossVersionInvestigation( { ...input, expected_workspace_revision: current.revision }, policy(directory), - { inputRoots: [directory] }, + {}, ), ).resolves.toMatchObject({ ok: true, value: { reused: true } }); await expect( @@ -172,7 +171,7 @@ describe("persistent cross-version investigation workspace", () => { }, }, policy(directory), - { inputRoots: [directory] }, + {}, ), ).resolves.toMatchObject({ ok: true, value: { reused: false } }); }); @@ -181,9 +180,11 @@ describe("persistent cross-version investigation workspace", () => { describe("persistent investigation workspace reuse", () => { it("checkpoints, validates, and reuses a completed deterministic run", async () => { const { directory, path, input } = await fixture(); - const first = await runCrossVersionInvestigation(input, policy(directory), { - inputRoots: [directory], - }); + const first = await runCrossVersionInvestigation( + input, + policy(directory), + {}, + ); expect(first).toMatchObject({ ok: true, value: { reused: false, workspace: { revision: 3 } }, @@ -212,7 +213,7 @@ describe("persistent investigation workspace reuse", () => { const second = await runCrossVersionInvestigation( input, policy(directory), - { inputRoots: [directory] }, + {}, ); expect(second).toMatchObject({ ok: true, @@ -235,12 +236,8 @@ describe("persistent investigation workspace reuse", () => { workspace_path: join(directory, "repeated-workspace.json"), }); const [first, repeated] = await Promise.all([ - runCrossVersionInvestigation(input, policy(directory), { - inputRoots: [directory], - }), - runCrossVersionInvestigation(repeatedInput, policy(directory), { - inputRoots: [directory], - }), + runCrossVersionInvestigation(input, policy(directory), {}), + runCrossVersionInvestigation(repeatedInput, policy(directory), {}), ]); if (!first.ok) throw first.error; if (!repeated.ok) throw repeated.error; @@ -293,21 +290,16 @@ describe("persistent investigation workspace replay", () => { const completed = await runCrossVersionInvestigation( input, policy(directory), - { inputRoots: [directory] }, + {}, ); if (!completed.ok) throw completed.error; const run = completed.value.workspace.runs[0]; if (run === undefined || run.comparison_evidence_id === null) throw new Error("missing completed run"); - const defaultAuthorization = vi.fn(() => Promise.resolve(ok(null))); await expect( - runCrossVersionInvestigation(input, policy(directory), { - inputRoots: [directory], - authorizeInputRead: defaultAuthorization, - }), + runCrossVersionInvestigation(input, policy(directory), {}), ).resolves.toMatchObject({ ok: true, value: { reused: true } }); - expect(defaultAuthorization).toHaveBeenCalledOnce(); const inconsistentRun = investigationRunSchema.parse({ ...run, @@ -335,7 +327,7 @@ describe("persistent investigation workspace replay", () => { replay_run_id: run.run_id, }, policy(directory), - { inputRoots: [] }, + {}, ), ).resolves.toMatchObject({ ok: false, @@ -346,7 +338,6 @@ describe("persistent investigation workspace replay", () => { rm(left, { recursive: true, force: true }), rm(right, { recursive: true, force: true }), ]); - const replayAuthorization = vi.fn(() => Promise.resolve(ok(null))); await expect( runCrossVersionInvestigation( { @@ -355,7 +346,7 @@ describe("persistent investigation workspace replay", () => { replay_run_id: run.run_id, }, policy(directory), - { inputRoots: [], authorizeInputRead: replayAuthorization }, + {}, ), ).resolves.toMatchObject({ ok: true, @@ -365,7 +356,6 @@ describe("persistent investigation workspace replay", () => { workspace: { revision: completed.value.workspace.revision }, }, }); - expect(replayAuthorization).not.toHaveBeenCalled(); for (const replayInput of [ { ...input, replay_run_id: `run_${"f".repeat(64)}` }, @@ -377,10 +367,7 @@ describe("persistent investigation workspace replay", () => { }, ]) await expect( - runCrossVersionInvestigation(replayInput, policy(directory), { - inputRoots: [], - authorizeInputRead: replayAuthorization, - }), + runCrossVersionInvestigation(replayInput, policy(directory), {}), ).resolves.toMatchObject({ ok: false, error: { @@ -388,6 +375,5 @@ describe("persistent investigation workspace replay", () => { reason: "revision-conflict", }, }); - expect(replayAuthorization).not.toHaveBeenCalled(); }); }); diff --git a/tests/boundary/filesystem/javascriptArtifactReconstructionLimits.test.ts b/tests/boundary/filesystem/javascriptArtifactReconstructionLimits.test.ts index c335a9a65d..ab1f733c53 100644 --- a/tests/boundary/filesystem/javascriptArtifactReconstructionLimits.test.ts +++ b/tests/boundary/filesystem/javascriptArtifactReconstructionLimits.test.ts @@ -19,54 +19,22 @@ import { } from "../../../src/artifacts/ArtifactReader.js"; import { writeJavaScriptArtifactFixture } from "../../fixtures/javascriptArtifactApplication.js"; -it("discovers source maps without reading them until separately approved", async () => { +it("reads local source maps as part of static artifact analysis", async () => { const root = await fixtureDirectory(); - const unapproved = await reconstructJavaScriptArtifact({ - input_path: root, - source_map_read_approved: false, - }); - const approved = await reconstructJavaScriptArtifact({ - input_path: root, - source_map_read_approved: true, - }); + const result = await reconstructJavaScriptArtifact({ input_path: root }); - expect(unapproved.graph.nodes.some(({ kind }) => kind === "source-map")).toBe( + expect(result.graph.nodes.some(({ kind }) => kind === "source-map")).toBe( true, ); - expect( - unapproved.graph.nodes.some(({ kind }) => kind === "source-module"), - ).toBe(false); - expect(unapproved.graph.coverage).toMatchObject({ - status: "partial", - truncated: false, - omitted_count: null, - }); - expect(unapproved.statistics.policy_filtered_text_files).toBe(1); - expect(unapproved.graph.nodes).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - kind: "unknown", - observations: expect.arrayContaining([ - expect.objectContaining({ - properties: expect.objectContaining({ - operation: "parse-local-source-map", - }), - evidence: expect.objectContaining({ state: "unavailable" }), - }), - ]), - }), - ]), + expect(result.graph.nodes.some(({ kind }) => kind === "source-module")).toBe( + true, ); - expect( - approved.graph.nodes.some(({ kind }) => kind === "source-module"), - ).toBe(true); }); it("reports text and AST limits as truncation instead of absence", async () => { const root = await fixtureDirectory(); const result = await reconstructJavaScriptArtifact({ input_path: root, - source_map_read_approved: true, limits: { max_text_file_bytes: 128, max_total_text_bytes: 1_024, @@ -163,7 +131,6 @@ it("keeps malformed JavaScript, package metadata, and source maps as explicit un const result = await reconstructJavaScriptArtifact({ input_path: root, - source_map_read_approved: true, }); const unknownOperations = result.graph.nodes .filter(({ kind }) => kind === "unknown") @@ -213,7 +180,6 @@ it("applies one source-map source budget across every local map", async () => { const result = await reconstructJavaScriptArtifact({ input_path: root, - source_map_read_approved: true, limits: { max_source_map_sources: 3 }, }); @@ -297,12 +263,12 @@ it("preserves cancellation and explicit format diagnostics", async () => { reason: "format", message: expect.stringContaining(root), }); - expect(() => + expect( javascriptArtifactReconstructionInputSchema.parse({ input_path: root, limits: { max_entries: 100_000 }, - }), - ).toThrow(/graph contract/iu); + }).limits.max_entries, + ).toBe(100_000); }); class TraversalReader implements ArtifactReader { diff --git a/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts b/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts index ea4406acc5..0453ff81b4 100644 --- a/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts +++ b/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts @@ -13,7 +13,6 @@ import { createJavaScriptApplicationGraph, createJavaScriptApplicationNode, } from "../../../src/domain/javascriptApplicationGraph.js"; -import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; describe("JavaScript export return-shape comparison", () => { it("reports exactly the heading depth addition from source-owned parser fixtures", async () => { @@ -194,7 +193,6 @@ describe("JavaScript export return-shape selection", () => { }); const ambiguousGraph = createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", - schema_version: 1, root_node_ids: left.graph.root_node_ids, nodes: [...left.graph.nodes, duplicate], edges: left.graph.edges, @@ -271,14 +269,8 @@ const compare = ( }); const analyzeGraph = async (root: string) => { - const authority = await permissionAuthorityForRoot( - root, - ["investigation_input"], - ["investigation_input"], - ); - const result = await analyzeJavaScriptApplication(authority, { + const result = await analyzeJavaScriptApplication({ input_path: root, - approved: true, }); if (!result.ok) throw result.error; return parseApplicationGraphEvidence(result.value); diff --git a/tests/boundary/filesystem/managedRuntimeCorrelation.test.ts b/tests/boundary/filesystem/managedRuntimeCorrelation.test.ts index 47f3d96bac..423bff1f52 100644 --- a/tests/boundary/filesystem/managedRuntimeCorrelation.test.ts +++ b/tests/boundary/filesystem/managedRuntimeCorrelation.test.ts @@ -234,7 +234,7 @@ const inspect = ( ) => { const target = managedPeFixtureTarget(bytes, path); const result = inspectManagedMembersBytes(bytes, target, limits); - const method = result.methods.items[0]; + const method = result.methods[0]; if (method === undefined) throw new Error("fixture has no method"); return { result, diff --git a/tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts b/tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts index 1b7fc02195..9448fafa27 100644 --- a/tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts +++ b/tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts @@ -235,7 +235,6 @@ const dependenciesFor = (root: string, onExecute: () => void) => { execute: async (prepared) => { onExecute(); return { - schema_version: 1, plan_digest: prepared.publicPlan.plan_digest, outcomes: [ { diff --git a/tests/boundary/filesystem/runtimeIdentification.test.ts b/tests/boundary/filesystem/runtimeIdentification.test.ts index 473662d9df..d35d6cbb05 100644 --- a/tests/boundary/filesystem/runtimeIdentification.test.ts +++ b/tests/boundary/filesystem/runtimeIdentification.test.ts @@ -53,11 +53,7 @@ describe("runtime identification", () => { await writeFile(path, await writer.close()); const inventory = parseEvidence( - await runProviderAnalysis(path, "inventory_artifact", { - node_limit: 100, - occurrence_limit: 100, - edge_limit: 100, - }), + await runProviderAnalysis(path, "inventory_artifact", {}), ); const first = identifyRuntimes({ inventory_evidence: [inventory] }); const second = identifyRuntimes({ inventory_evidence: [inventory] }); diff --git a/tests/boundary/mcp/artifactMcp.inlineInventory.test.ts b/tests/boundary/mcp/artifactMcp.inlineInventory.test.ts new file mode 100644 index 0000000000..dc82fa2d49 --- /dev/null +++ b/tests/boundary/mcp/artifactMcp.inlineInventory.test.ts @@ -0,0 +1,63 @@ +import { writeFile } from "node:fs/promises"; +import { join } from "node:path"; + +import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; +import { TextReader, Uint8ArrayWriter, ZipWriter } from "@zip.js/zip.js"; +import { expect, it } from "vitest"; +import { z } from "zod"; + +import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; +import { createTestBinarySession } from "../../fixtures/binarySession.js"; +import { ArtifactProvider } from "../../../src/artifacts/ArtifactProvider.js"; +import { createServer } from "../../../src/server/createServer.js"; + +it("returns every artifact occurrence in one MCP call", async () => { + const directory = await createTestTempDirectory("rea-artifact-inline-"); + const archive = join(directory, "many.zip"); + const writer = new ZipWriter(new Uint8ArrayWriter()); + const fileCount = 520; + for (let index = 0; index < fileCount; index += 1) { + await writer.add( + `files/${String(index)}.txt`, + new TextReader(`file-${String(index)}`), + ); + } + await writeFile(archive, await writer.close()); + + const session = createTestBinarySession(new ArtifactProvider()); + const server = createServer(session, session); + const client = new Client({ name: "artifact-inline-test", version: "1" }); + const [clientTransport, serverTransport] = + InMemoryTransport.createLinkedPair(); + try { + await server.connect(serverTransport); + await client.connect(clientTransport); + const opened = await client.callTool({ + name: "open_binary", + arguments: { path: archive }, + }); + expect(opened.isError).not.toBe(true); + const result = await client.callTool({ + name: "inventory_artifact", + arguments: {}, + }); + expect(result.isError, JSON.stringify(result.structuredContent)).not.toBe( + true, + ); + const inventory = z + .object({ + occurrences: z.object({ + items: z.array(z.object({ logical_path: z.string() })), + total: z.number(), + }), + }) + .parse( + z.object({ result: z.unknown() }).parse(result.structuredContent) + .result, + ); + expect(inventory.occurrences.items).toHaveLength(fileCount + 1); + expect(inventory.occurrences.total).toBe(fileCount + 1); + } finally { + await Promise.allSettled([client.close(), server.close(), session.close()]); + } +}); diff --git a/tests/boundary/mcp/artifactMcp.test.ts b/tests/boundary/mcp/artifactMcp.test.ts index 6c6290dc96..53d11e18d7 100644 --- a/tests/boundary/mcp/artifactMcp.test.ts +++ b/tests/boundary/mcp/artifactMcp.test.ts @@ -12,7 +12,6 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { createTestBinarySession } from "../../fixtures/binarySession.js"; import { ArtifactProvider } from "../../../src/artifacts/ArtifactProvider.js"; import { ARTIFACT_COMPARISON_EXAMPLE } from "../../../src/contracts/artifactComparisonExample.js"; -import { evidenceBundleSchema } from "../../../src/domain/evidenceBundle.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; @@ -99,6 +98,7 @@ const artifactInventoryResultSchema = z.object({ items: z.array( z.object({ logical_path: z.string(), hash_status: z.string() }), ), + total: z.number(), }), integrity_contradictions: z.array( z.object({ @@ -144,18 +144,6 @@ it("records an approved mismatch, preserves verified siblings, and never reports name: "open_binary", arguments: { path: archive }, }); - const limited = await client.callTool({ - name: "inventory_artifact", - arguments: { - integrity_policy: "record-and-continue", - integrity_continue_approved: true, - max_integrity_mismatches: 1, - }, - }); - expect(limited).toMatchObject({ - isError: true, - structuredContent: { error: { code: "truncated" } }, - }); const result = await client.callTool({ name: "inventory_artifact", arguments: { @@ -163,7 +151,9 @@ it("records an approved mismatch, preserves verified siblings, and never reports integrity_continue_approved: true, }, }); - expect(result.isError).not.toBe(true); + expect(result.isError, JSON.stringify(result.structuredContent)).not.toBe( + true, + ); const compact = compactResult(result.structuredContent); const evidence = session.evidenceById(compact.evidence_id); if (evidence === undefined) throw new Error("missing inventory Evidence"); @@ -275,7 +265,12 @@ it("rejects altered payloads that reuse session Evidence IDs", async () => { }, }); expect(result.isError).toBe(true); - expect(session.exportEvidenceBundle().records).toHaveLength(2); + expect( + session.evidenceById(ARTIFACT_COMPARISON_EXAMPLE.left.evidence_id), + ).toBeDefined(); + expect( + session.evidenceById(ARTIFACT_COMPARISON_EXAMPLE.right.evidence_id), + ).toBeDefined(); } finally { await Promise.allSettled([client.close(), server.close(), session.close()]); } @@ -302,13 +297,18 @@ it("rejects comparison Evidence that is not owned by the session", async () => { arguments: ARTIFACT_COMPARISON_EXAMPLE, }); expect(result.isError).toBe(true); - expect(session.exportEvidenceBundle().records).toEqual([]); + expect( + session.evidenceById(ARTIFACT_COMPARISON_EXAMPLE.left.evidence_id), + ).toBeUndefined(); + expect( + session.evidenceById(ARTIFACT_COMPARISON_EXAMPLE.right.evidence_id), + ).toBeUndefined(); } finally { await Promise.allSettled([client.close(), server.close(), session.close()]); } }); -it("opens archives without Hopper, compares them, and exports linked evidence", async () => { +it("returns full artifact graphs inline and compares changed inventories", async () => { const directory = await createTestTempDirectory("rea-artifact-mcp-"); const archive = join(directory, "fixture.ipa"); const changedArchive = join(directory, "changed.ipa"); @@ -336,7 +336,7 @@ it("opens archives without Hopper, compares them, and exports linked evidence", expect(opened.isError).not.toBe(true); const inspected = await client.callTool({ name: "inspect_artifact", - arguments: { max_observations: 1, max_relationships: 1 }, + arguments: {}, }); expect(inspected.isError).not.toBe(true); const inspectionResult = compactResult(inspected.structuredContent); @@ -354,10 +354,9 @@ it("opens archives without Hopper, compares them, and exports linked evidence", }), ), coverage: z.object({ - status: z.literal("truncated"), + status: z.literal("complete-within-substeps"), substeps_completed: z.literal(1), }), - unexplored_branches: z.array(z.object({ reason: z.string() })), }) .parse(inspectionResult.result); expect(inspection.substeps).toHaveLength(1); @@ -367,11 +366,6 @@ it("opens archives without Hopper, compares them, and exports linked evidence", expect(inspectionEvidence.evidence_links).toEqual([ inspection.substeps[0]?.evidence_id, ]); - expect(inspection.unexplored_branches).toEqual( - expect.arrayContaining([ - expect.objectContaining({ reason: "page-limit" }), - ]), - ); const inventory = await client.callTool({ name: "inventory_artifact", arguments: {}, @@ -384,9 +378,22 @@ it("opens archives without Hopper, compares them, and exports linked evidence", provider: { id: "rea-artifact-graph" }, subject: { format: "ipa" }, }); - expect(inventoryResult.result).toMatchObject({ - manifest: { root_format: "ipa" }, - }); + expect( + z + .object({ + manifest: z.object({ root_format: z.literal("ipa") }), + occurrences: z.object({ + items: z.array(z.object({ logical_path: z.string() })), + }), + }) + .parse(inventoryResult.result).occurrences.items, + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + logical_path: "Payload/Fixture.app/main.js", + }), + ]), + ); const openedChanged = await client.callTool({ name: "open_binary", arguments: { path: changedArchive }, @@ -421,32 +428,11 @@ it("opens archives without Hopper, compares them, and exports linked evidence", result: { items: [ expect.objectContaining({ - unknown: expect.objectContaining({ - domain: "artifact-comparison", - }), + domain: "artifact-comparison", }), ], }, }); - const snapshotted = await client.callTool({ - name: "snapshot_evidence_bundle", - arguments: {}, - }); - const bundleUri = z - .object({ result: z.object({ bundle_uri: z.string() }) }) - .parse(snapshotted.structuredContent).result.bundle_uri; - const bundleResource = await client.readResource({ uri: bundleUri }); - const bundle = evidenceBundleSchema.parse( - JSON.parse( - z.object({ text: z.string() }).parse(bundleResource.contents[0]).text, - ), - ); - expect(bundle.records).toHaveLength(6); - expect(bundle.artifacts).toContainEqual({ - digest: { sha256: evidence.subject?.digest.sha256 }, - format: "ipa", - architecture: null, - }); } finally { await Promise.allSettled([client.close(), server.close(), session.close()]); } @@ -457,6 +443,5 @@ const compactResult = (value: unknown) => .object({ result: z.unknown(), evidence_id: z.string(), - evidence_uri: z.string(), }) .parse(value); diff --git a/tests/boundary/mcp/browserMcp.test.ts b/tests/boundary/mcp/browserMcp.test.ts index 9b45c4ed6b..afb352c863 100644 --- a/tests/boundary/mcp/browserMcp.test.ts +++ b/tests/boundary/mcp/browserMcp.test.ts @@ -53,7 +53,7 @@ it( ); const status = await connected.client.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }); expect(status.structuredContent).toMatchObject({ result: { @@ -77,7 +77,7 @@ it( expect(listed.isError).not.toBe(true); expect(listed.structuredContent).toMatchObject({ result: { - targets: { items: [{ target_id: "allowed-page" }] }, + targets: [{ target_id: "allowed-page" }], }, }); const unapprovedSourceCapture = await connected.client.callTool({ @@ -246,12 +246,10 @@ const verifySessionAndComparisonTools = async ( result: { status: "identical", changed_pixels: 0 }, }); const evidenceId = evidenceIdOf(inspected.structuredContent); - const evidence = await connected.client.readResource({ - uri: `rea://evidence/${evidenceId}`, + expect(inspected.structuredContent).toMatchObject({ + evidence_id: evidenceId, + result: expect.any(Object), }); - expect(evidence.contents[0]).toEqual( - expect.objectContaining({ text: expect.stringContaining(evidenceId) }), - ); }; it("denies origins outside the administrator ceiling before CDP attach", async () => { diff --git a/tests/boundary/mcp/browserScenarioMcp.test.ts b/tests/boundary/mcp/browserScenarioMcp.test.ts index ce5a698639..737c1f316f 100644 --- a/tests/boundary/mcp/browserScenarioMcp.test.ts +++ b/tests/boundary/mcp/browserScenarioMcp.test.ts @@ -75,7 +75,6 @@ const captureFor = (scenario: BrowserScenario): BrowserScenarioCapture => { }, }); return browserScenarioCaptureSchema.parse({ - schema_version: 1, browser: { mode: scenario.browser.mode, process_ownership: "provider-owned", @@ -108,7 +107,6 @@ const captureFor = (scenario: BrowserScenario): BrowserScenarioCapture => { }; const scenario = (origin = "https://app.example.test") => ({ - schema_version: 1, browser: { mode: "launch", executable_path: process.execPath, diff --git a/tests/boundary/mcp/bundleComparisonMcp.test.ts b/tests/boundary/mcp/bundleComparisonMcp.test.ts index c358374320..3564f6f160 100644 --- a/tests/boundary/mcp/bundleComparisonMcp.test.ts +++ b/tests/boundary/mcp/bundleComparisonMcp.test.ts @@ -72,7 +72,6 @@ describe("bundle comparison MCP integration", () => { expect(result.structuredContent).toMatchObject({ result: { status: "changed" }, evidence_id: expect.stringMatching(/^ev_[a-f0-9]{64}$/u), - evidence_uri: expect.stringMatching(/^rea:\/\/evidence\/ev_/u), }); } finally { await connected.close(); diff --git a/tests/boundary/mcp/electronMcp.test.ts b/tests/boundary/mcp/electronMcp.test.ts index 82b2a774d0..41f5d6fbb5 100644 --- a/tests/boundary/mcp/electronMcp.test.ts +++ b/tests/boundary/mcp/electronMcp.test.ts @@ -58,7 +58,6 @@ it("exposes root-confined Electron discovery and inspection as Evidence v2", asy REA_ELECTRON_OBSERVE_ENABLED: "true", REA_ELECTRON_CDP_ENDPOINTS_JSON: JSON.stringify([browser.endpoint]), REA_ELECTRON_FILE_ROOTS_JSON: JSON.stringify([root]), - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([root]), }); if (!config.ok) throw config.error; const authority = await loadConfiguredPermissionAuthority(config.value); @@ -95,7 +94,7 @@ it("exposes root-confined Electron discovery and inspection as Evidence v2", asy expect(listed.isError).not.toBe(true); expect(listed.structuredContent).toMatchObject({ result: { - targets: { items: [{ target_id: "electron-page" }] }, + targets: [{ target_id: "electron-page" }], }, }); const inspected = await client.callTool({ @@ -112,7 +111,7 @@ it("exposes root-confined Electron discovery and inspection as Evidence v2", asy }); const analyzed = await client.callTool({ name: "analyze_javascript_application", - arguments: { input_path: root, approved: true, detail: "full" }, + arguments: { input_path: root }, }); expect(analyzed.isError).not.toBe(true); expect(analyzed.structuredContent).toMatchObject({ @@ -122,7 +121,7 @@ it("exposes root-confined Electron discovery and inspection as Evidence v2", asy expect(analysisText).toBeDefined(); if (analysisText?.type !== "text") throw new TypeError("Missing JavaScript analysis text projection"); - expect(analysisText.text).not.toContain('"nodes":['); + expect(analysisText.text).toContain('"nodes":['); const reconciled = await client.callTool({ name: "reconcile_javascript_runtime", arguments: { @@ -242,7 +241,6 @@ it("exposes active Electron scenarios through the separately granted MCP boundar const captured = await client.callTool({ name: "capture_electron_scenario", arguments: { - schema_version: 1, executable_path: process.execPath, application_path: join(aliasedRoot, "main.js"), application_root: aliasedRoot, @@ -292,9 +290,7 @@ it("exposes the target-free static JavaScript application workflow", async () => const root = await createTestTempDirectory("rea-electron-static-mcp-"); temporary.push(root); await writeElectronBoundaryFixture(root); - const config = parseConfig({ - REA_INVESTIGATION_INPUT_ROOTS_JSON: JSON.stringify([root]), - }); + const config = parseConfig({}); if (!config.ok) throw config.error; const authority = await loadConfiguredPermissionAuthority(config.value); if (!authority.ok) throw authority.error; @@ -322,7 +318,7 @@ it("exposes the target-free static JavaScript application workflow", async () => const analyzed = await client.callTool({ name: "analyze_javascript_application", - arguments: { input_path: root, approved: true }, + arguments: { input_path: root }, }); expect(analyzed.isError).not.toBe(true); @@ -330,9 +326,7 @@ it("exposes the target-free static JavaScript application workflow", async () => .object({ evidence_id: z.string(), result: z.object({ - schema_version: z.literal(2), input_path: z.string(), - unknowns: z.array(z.string()), summary: z.object({ browser_windows: z.number(), context_bridge_apis: z.number(), @@ -340,19 +334,19 @@ it("exposes the target-free static JavaScript application workflow", async () => }), graph: z.object({ graph_id: z.string(), - node_count: z.number(), - edge_count: z.number(), - top_findings: z.array(z.unknown()), - pages: z.object({ nodes: z.string(), edges: z.string() }), + nodes: z.array(z.unknown()), + edges: z.array(z.unknown()), }), semantic_graph: z.object({ graph_id: z.string(), - nodes: z.number(), - relations: z.number(), - unknown_frontiers: z.number(), - query_tool: z.literal("trace_javascript_semantics"), + nodes: z.array(z.unknown()), + relations: z.array(z.unknown()), }), }), + evidence: z.object({ + operation: z.literal("analyze_javascript_application"), + parameters: z.object({ format: z.string() }), + }), }) .parse(analyzed.structuredContent); expect(projected.result).toMatchObject({ @@ -363,83 +357,9 @@ it("exposes the target-free static JavaScript application workflow", async () => ipc: { paired_renderer_transmissions: 4 }, }, }); - expect(projected.result.graph.node_count).toBeGreaterThan(0); - expect(projected.result.semantic_graph.nodes).toBeGreaterThan(0); - expect(JSON.stringify(analyzed.structuredContent)).not.toContain('"nodes":['); - - const nodePage = await client.readResource({ - uri: projected.result.graph.pages.nodes, - }); - const nodeContent = nodePage.contents[0]; - if (nodeContent === undefined || !("text" in nodeContent)) - throw new TypeError("Missing JavaScript application graph node page"); - expect(JSON.parse(nodeContent.text)).toMatchObject({ - evidence_id: projected.evidence_id, - graph_id: projected.result.graph.graph_id, - collection: "nodes", - items: expect.any(Array), - offset: 0, - limit: 100, - }); -}); - -it("reports an unconfigured investigation ceiling before static analysis", async () => { - const root = await createTestTempDirectory("rea-electron-denied-mcp-"); - temporary.push(root); - await writeElectronBoundaryFixture(root); - const config = parseConfig({}); - if (!config.ok) throw config.error; - const authority = await loadConfiguredPermissionAuthority(config.value); - if (!authority.ok) throw authority.error; - const session = createTestBinarySession(() => ({ - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - const server = createServer(session, session, { - permissionAuthority: authority.value, - }); - const client = new Client({ - name: "electron-denied-mcp-test", - version: "1", - }); - const [clientTransport, serverTransport] = - InMemoryTransport.createLinkedPair(); - resources.push(client, server, session); - await server.connect(serverTransport); - await client.connect(clientTransport); - - const status = await client.callTool({ - name: "binary_session", - arguments: { - detail: "capabilities", - capability_family: "electron-provider", - limit: 100, - }, - }); - expect(status.structuredContent).toMatchObject({ - result: { - capabilities: { - items: expect.arrayContaining([ - expect.objectContaining({ - name: "analyze_javascript_application", - available: false, - reason: "policy_disabled", - }), - expect.objectContaining({ - name: "reconcile_javascript_runtime", - available: true, - reason: "available", - }), - ]), - }, - }, - }); - - expect( - (await client.listTools()).tools.some( - ({ name }) => name === "analyze_javascript_application", - ), - ).toBe(true); + expect(projected.result.graph.nodes.length).toBeGreaterThan(0); + expect(projected.result.semantic_graph.nodes.length).toBeGreaterThan(0); + expect(projected.evidence.operation).toBe("analyze_javascript_application"); }); const evidenceFor = (session: BinarySession, value: unknown) => { 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 fe74d02edb..a20acdcb47 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 @@ -25,24 +25,18 @@ const PROCEDURES = { "0x6": "prefix_TtOther", }; -const page = (values: Readonly>) => ({ - items: Object.entries(values).map(([address, value]) => ({ address, value })), - offset: 0, - limit: 100, - total: Object.keys(values).length, - next_offset: null, - has_more: false, -}); +const inventory = (values: Readonly>) => + Object.entries(values).map(([address, value]) => ({ address, value })); const fixturePort = (): AnalysisOperationPort => ({ execute: (name, arguments_) => { switch (name) { case "list_procedures": - return Promise.resolve(ok(page(PROCEDURES))); + return Promise.resolve(ok(inventory(PROCEDURES))); case "list_names": return Promise.resolve( ok( - page({ + inventory({ "0x10": "_OBJC_CLASS_$_Fixture", "0x11": "_OBJC_CLASS_$_Fixture", "0x12": "_OBJC_PROTOCOL_$_FixtureDelegate", @@ -93,7 +87,11 @@ const fixturePort = (): AnalysisOperationPort => ({ case "list_documents": return Promise.resolve(ok(["fixture"])); case "list_strings": - return Promise.resolve(ok(page({ "0x30": "hello" }))); + return Promise.resolve(ok(inventory({ "0x30": "hello" }))); + case "search_strings": + return Promise.resolve(ok(inventory({ "0x30": "hello" }))); + case "search_procedures": + return Promise.resolve(ok(inventory({}))); case "analyze_function": return Promise.resolve( ok({ @@ -103,29 +101,16 @@ const fixturePort = (): AnalysisOperationPort => ({ signature: null, locals: [], }, - pseudocode: { - text: "return 0;", - total_chars: 9, - returned_chars: 9, - truncated: false, - next_offset: null, - }, - assembly: { - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }, - comments: emptyBounded(), - callers: emptyBounded(), - callees: emptyBounded(), - incoming_references: emptyBounded(), - outgoing_references: emptyBounded(), - referenced_strings: emptyBounded(), - referenced_names: emptyBounded(), - basic_blocks: emptyBounded(), - instruction_scan: { scanned: 0, truncated: false }, + pseudocode: "return 0;", + assembly: [], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [], }), ); default: @@ -134,14 +119,6 @@ const fixturePort = (): AnalysisOperationPort => ({ }, }); -const emptyBounded = () => ({ - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, -}); - const resources: Array<{ close(): Promise }> = []; afterEach(async () => { @@ -218,15 +195,15 @@ describe("enhanced MCP tools", () => { ["get_objc_classes", { pattern: "Fixture" }], ["get_objc_protocols", {}], ["batch_decompile", { addresses: ["0x1", "0x2"] }], - ["get_call_graph", { address: "0x1", direction: "forward", depth: 2 }], + ["get_call_graph", { address: "0x1", direction: "forward" }], ["analyze_swift_types", {}], ["find_xrefs_to_name", { name: "entry" }], ["binary_overview", {}], ["analyze_function", { procedure: "0x1" }], ["inspect_native_api", { procedure: "0x1" }], - ["trace_feature", { query: "hello", max_operations: 10 }], - ["find_code_for_string", { query: "hello", max_operations: 10 }], - ["trace_call_path", { start: "0x1", goal: "0x2", max_operations: 10 }], + ["trace_feature", { query: "hello" }], + ["find_code_for_string", { query: "hello" }], + ["trace_call_path", { start: "0x1", goal: "0x2" }], ] as const; const results = await Promise.all( calls.map(async ([name, arguments_]) => @@ -267,7 +244,7 @@ describe("enhanced MCP tools", () => { }); expect(results[8]).toMatchObject({ procedure: { address: "0x1", name: "entry" }, - pseudocode: { text: "return 0;" }, + pseudocode: "return 0;", }); expect(results[9]).toMatchObject({ procedure: { address: "0x1", name: "entry" }, diff --git a/tests/boundary/mcp/enhancedTools.02-returns-evidence-ids-and-explicit.test.ts b/tests/boundary/mcp/enhancedTools.02-returns-evidence-ids-and-explicit.test.ts index f5e192b91d..bc5a2f72b1 100644 --- a/tests/boundary/mcp/enhancedTools.02-returns-evidence-ids-and-explicit.test.ts +++ b/tests/boundary/mcp/enhancedTools.02-returns-evidence-ids-and-explicit.test.ts @@ -17,24 +17,18 @@ const PROCEDURES = { "0x6": "prefix_TtOther", }; -const page = (values: Readonly>) => ({ - items: Object.entries(values).map(([address, value]) => ({ address, value })), - offset: 0, - limit: 100, - total: Object.keys(values).length, - next_offset: null, - has_more: false, -}); +const inventory = (values: Readonly>) => + Object.entries(values).map(([address, value]) => ({ address, value })); const fixturePort = (): AnalysisOperationPort => ({ execute: (name, arguments_) => { switch (name) { case "list_procedures": - return Promise.resolve(ok(page(PROCEDURES))); + return Promise.resolve(ok(inventory(PROCEDURES))); case "list_names": return Promise.resolve( ok( - page({ + inventory({ "0x10": "_OBJC_CLASS_$_Fixture", "0x11": "_OBJC_CLASS_$_Fixture", "0x12": "_OBJC_PROTOCOL_$_FixtureDelegate", @@ -85,7 +79,7 @@ const fixturePort = (): AnalysisOperationPort => ({ case "list_documents": return Promise.resolve(ok(["fixture"])); case "list_strings": - return Promise.resolve(ok(page({ "0x30": "hello" }))); + return Promise.resolve(ok(inventory({ "0x30": "hello" }))); case "analyze_function": return Promise.resolve( ok({ @@ -154,15 +148,13 @@ const connect = async (analysis: AnalysisOperationPort = fixturePort()) => { }; describe("enhanced MCP tools", () => { - it("returns Evidence IDs and explicit call-path frontiers at limits", async () => { + it("returns Evidence IDs and a complete call path", async () => { const client = await connect(); const result = await client.callTool({ name: "trace_call_path", arguments: { start: "0x1", goal: "0x3", - max_nodes: 1, - max_operations: 10, }, }); @@ -170,19 +162,12 @@ describe("enhanced MCP tools", () => { expect(result.structuredContent).toMatchObject({ evidence_id: expect.stringMatching(/^ev_[a-f0-9]{64}$/u), result: { - goal_status: "not_reached", - nodes: [{ address: "0x1", depth: 0 }], - frontier: ["0x2"], - truncated: true, - residual_unknowns: expect.arrayContaining([ - expect.stringContaining("reached the node limit"), - expect.stringContaining("reached the edge limit"), + goal_status: "reached", + nodes: expect.arrayContaining([ + expect.objectContaining({ address: "0x1" }), + expect.objectContaining({ address: "0x3" }), ]), - limits: { - max_nodes: 1, - nodes_visited: 1, - operations_used: 1, - }, + truncated: false, }, }); }); diff --git a/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts b/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts index d23006a172..c4c06ef93a 100644 --- a/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts +++ b/tests/boundary/mcp/enhancedTools.03-returns-typed-graph-failures-and.test.ts @@ -22,24 +22,18 @@ const PROCEDURES = { "0x6": "prefix_TtOther", }; -const page = (values: Readonly>) => ({ - items: Object.entries(values).map(([address, value]) => ({ address, value })), - offset: 0, - limit: 100, - total: Object.keys(values).length, - next_offset: null, - has_more: false, -}); +const inventory = (values: Readonly>) => + Object.entries(values).map(([address, value]) => ({ address, value })); const fixturePort = (): AnalysisOperationPort => ({ execute: (name, arguments_) => { switch (name) { case "list_procedures": - return Promise.resolve(ok(page(PROCEDURES))); + return Promise.resolve(ok(inventory(PROCEDURES))); case "list_names": return Promise.resolve( ok( - page({ + inventory({ "0x10": "_OBJC_CLASS_$_Fixture", "0x11": "_OBJC_CLASS_$_Fixture", "0x12": "_OBJC_PROTOCOL_$_FixtureDelegate", @@ -90,7 +84,7 @@ const fixturePort = (): AnalysisOperationPort => ({ case "list_documents": return Promise.resolve(ok(["fixture"])); case "list_strings": - return Promise.resolve(ok(page({ "0x30": "hello" }))); + return Promise.resolve(ok(inventory({ "0x30": "hello" }))); case "analyze_function": return Promise.resolve( ok({ @@ -195,13 +189,12 @@ describe("enhanced MCP tools", () => { execute: (name) => name === "procedure_callees" ? Promise.resolve(err(new AnalysisOutputError(name, "failed"))) - : Promise.resolve(ok(page({}))), + : Promise.resolve(ok(inventory({}))), }); const graph = await tools.execute("get_call_graph", { address: "0x1", direction: "forward", - depth: 1, }); const unresolved = await tools.execute("find_xrefs_to_name", { name: "missing", @@ -233,53 +226,72 @@ describe("enhanced MCP tools", () => { }); }); - it("follows procedure pagination for whole-binary workflows", async () => { - const offsets: number[] = []; - const client = await connect({ - execute: (_name, arguments_) => { - const offset = arguments_.offset; - offsets.push(typeof offset === "number" ? offset : 0); + it("traverses the complete reachable call graph and stops at cycles", async () => { + const calls: string[] = []; + const tools = new EnhancedTools({ + execute: (name, arguments_) => { + if (name !== "procedure_callees") return Promise.resolve(ok([])); + const address = String(arguments_.procedure); + calls.push(address); + const next = Number.parseInt(address.slice(2), 16) + 1; return Promise.resolve( - ok({ - items: [ - { - address: offset === 500 ? "0x2" : "0x1", - value: offset === 500 ? "_TtC4Last" : "_TtC5First", - }, - ], - offset: typeof offset === "number" ? offset : 0, - limit: 500, - total: 2, - next_offset: offset === 500 ? null : 500, - has_more: offset !== 500, - }), + ok(next <= 8 ? [`0x${next.toString(16)}`] : ["0x2"]), + ); + }, + }); + + const result = await tools.execute("get_call_graph", { + address: "0x1", + direction: "forward", + }); + + expect(calls).toEqual([ + "0x1", + "0x2", + "0x3", + "0x4", + "0x5", + "0x6", + "0x7", + "0x8", + ]); + expect(result).toMatchObject({ + ok: true, + value: { + "0": [{ address: "0x1", calls: ["0x2"], status: "ok" }], + "7": [{ address: "0x8", calls: ["0x2"], status: "ok" }], + }, + }); + }); + + it("uses every procedure in one complete inventory", async () => { + const calls: string[] = []; + const client = await connect({ + execute: (name) => { + calls.push(name); + return Promise.resolve( + ok([ + { address: "0x1", value: "_TtC5First" }, + { address: "0x2", value: "_TtC4Last" }, + ]), ); }, }); const result = jsonResult( await client.callTool({ name: "swift_classes", arguments: {} }), ); - expect(offsets).toEqual([0, 500]); + expect(calls).toEqual(["list_procedures"]); expect(result).toMatchObject({ count: 2 }); }); - it("does not start another page after cancellation", async () => { + it("returns cancellation when a complete inventory call is cancelled", async () => { const controller = new AbortController(); let calls = 0; const analysis: AnalysisOperationPort = { execute: () => { calls += 1; controller.abort(); - return Promise.resolve( - ok({ - items: [{ address: "0x1", value: "_TtC5First" }], - offset: 0, - limit: 500, - total: 2, - next_offset: 500, - has_more: true, - }), - ); + return Promise.resolve(ok([{ address: "0x1", value: "_TtC5First" }])); }, }; diff --git a/tests/boundary/mcp/enhancedTools.04-follows-name-pagination-for-exhaustive.test.ts b/tests/boundary/mcp/enhancedTools.04-uses-complete-inventories-inline.test.ts similarity index 75% rename from tests/boundary/mcp/enhancedTools.04-follows-name-pagination-for-exhaustive.test.ts rename to tests/boundary/mcp/enhancedTools.04-uses-complete-inventories-inline.test.ts index 4e679af526..9adb4934cc 100644 --- a/tests/boundary/mcp/enhancedTools.04-follows-name-pagination-for-exhaustive.test.ts +++ b/tests/boundary/mcp/enhancedTools.04-uses-complete-inventories-inline.test.ts @@ -19,24 +19,18 @@ const PROCEDURES = { "0x6": "prefix_TtOther", }; -const page = (values: Readonly>) => ({ - items: Object.entries(values).map(([address, value]) => ({ address, value })), - offset: 0, - limit: 100, - total: Object.keys(values).length, - next_offset: null, - has_more: false, -}); +const inventory = (values: Readonly>) => + Object.entries(values).map(([address, value]) => ({ address, value })); const fixturePort = (): AnalysisOperationPort => ({ execute: (name, arguments_) => { switch (name) { case "list_procedures": - return Promise.resolve(ok(page(PROCEDURES))); + return Promise.resolve(ok(inventory(PROCEDURES))); case "list_names": return Promise.resolve( ok( - page({ + inventory({ "0x10": "_OBJC_CLASS_$_Fixture", "0x11": "_OBJC_CLASS_$_Fixture", "0x12": "_OBJC_PROTOCOL_$_FixtureDelegate", @@ -87,7 +81,7 @@ const fixturePort = (): AnalysisOperationPort => ({ case "list_documents": return Promise.resolve(ok(["fixture"])); case "list_strings": - return Promise.resolve(ok(page({ "0x30": "hello" }))); + return Promise.resolve(ok(inventory({ "0x30": "hello" }))); case "analyze_function": return Promise.resolve( ok({ @@ -187,43 +181,31 @@ const jsonResult = (result: CallToolResult): JsonValue => { }; describe("enhanced MCP tools", () => { - it("follows name pagination for exhaustive Objective-C discovery", async () => { - const offsets: number[] = []; + it("discovers every Objective-C class from one complete inventory", async () => { + const calls: string[] = []; const client = await connect({ - execute: (name, arguments_) => { + execute: (name) => { expect(name).toBe("list_names"); - const offset = - typeof arguments_.offset === "number" ? arguments_.offset : 0; - offsets.push(offset); + calls.push(name); return Promise.resolve( - ok({ - items: [ - { - address: offset === 500 ? "0x2" : "0x1", - value: - offset === 500 ? "_OBJC_CLASS_$_Last" : "_OBJC_CLASS_$_First", - }, - ], - offset, - limit: 500, - total: 2, - next_offset: offset === 500 ? null : 500, - has_more: offset !== 500, - }), + ok([ + { address: "0x1", value: "_OBJC_CLASS_$_First" }, + { address: "0x2", value: "_OBJC_CLASS_$_Last" }, + ]), ); }, }); const result = jsonResult( await client.callTool({ name: "get_objc_classes", arguments: {} }), ); - expect(offsets).toEqual([0, 500]); + expect(calls).toEqual(["list_names"]); expect(result).toMatchObject({ count: 2 }); }); - it("honors overview detail and limit while reporting exhaustive totals", async () => { - const procedureOffsets: number[] = []; + it("returns the complete overview inline with exhaustive totals", async () => { + const inventoryCalls: string[] = []; const client = await connect({ - execute: (name, arguments_) => { + execute: (name) => { switch (name) { case "list_segments": return Promise.resolve( @@ -235,34 +217,22 @@ describe("enhanced MCP tools", () => { case "list_documents": return Promise.resolve(ok(["fixture"])); case "list_strings": + inventoryCalls.push(name); return Promise.resolve( - ok({ - items: [{ address: "0x30", value: "first page only" }], - offset: 0, - limit: 100, - total: 700, - next_offset: 100, - has_more: true, - }), + ok( + Array.from({ length: 700 }, (_, index) => ({ + address: `0x${(0x30 + index).toString(16)}`, + value: `string-${index}`, + })), + ), ); case "list_procedures": { - const offset = - typeof arguments_.offset === "number" ? arguments_.offset : 0; - procedureOffsets.push(offset); + inventoryCalls.push(name); return Promise.resolve( - ok({ - items: [ - { - address: offset === 500 ? "0x2" : "0x1", - value: offset === 500 ? "last" : "first", - }, - ], - offset, - limit: 500, - total: 2, - next_offset: offset === 500 ? null : 500, - has_more: offset !== 500, - }), + ok([ + { address: "0x1", value: "first" }, + { address: "0x2", value: "last" }, + ]), ); } default: @@ -273,15 +243,15 @@ describe("enhanced MCP tools", () => { const result = jsonResult( await client.callTool({ name: "binary_overview", - arguments: { detail: "detailed", limit: 1 }, + arguments: {}, }), ); - expect(procedureOffsets).toEqual([0]); + expect(inventoryCalls).toEqual(["list_procedures", "list_strings"]); expect(result).toEqual({ document: "fixture", - detail: "detailed", segments: [ { name: "__TEXT", start: "0x1000", end: "0x1800", length: 2048 }, + { name: "__DATA", start: "0x1800", end: "0x2000", length: 2048 }, ], segment_count: 2, procedure_count: 2, @@ -289,17 +259,12 @@ describe("enhanced MCP tools", () => { }); }); - it("rejects non-advancing pagination metadata", async () => { + it("rejects paginated provider output", async () => { const client = await connect({ execute: () => Promise.resolve( ok({ items: [{ address: "0x1", value: "_TtC5First" }], - offset: 0, - limit: 500, - total: 2, - next_offset: 0, - has_more: true, }), ), }); diff --git a/tests/boundary/mcp/enhancedTools.06-rejects-incomplete-function-dossiers-at.test.ts b/tests/boundary/mcp/enhancedTools.06-rejects-incomplete-function-dossiers-at.test.ts index bdecd07506..5657b8ab5d 100644 --- a/tests/boundary/mcp/enhancedTools.06-rejects-incomplete-function-dossiers-at.test.ts +++ b/tests/boundary/mcp/enhancedTools.06-rejects-incomplete-function-dossiers-at.test.ts @@ -14,24 +14,18 @@ const PROCEDURES = { "0x6": "prefix_TtOther", }; -const page = (values: Readonly>) => ({ - items: Object.entries(values).map(([address, value]) => ({ address, value })), - offset: 0, - limit: 100, - total: Object.keys(values).length, - next_offset: null, - has_more: false, -}); +const inventory = (values: Readonly>) => + Object.entries(values).map(([address, value]) => ({ address, value })); const fixturePort = (): AnalysisOperationPort => ({ execute: (name, arguments_) => { switch (name) { case "list_procedures": - return Promise.resolve(ok(page(PROCEDURES))); + return Promise.resolve(ok(inventory(PROCEDURES))); case "list_names": return Promise.resolve( ok( - page({ + inventory({ "0x10": "_OBJC_CLASS_$_Fixture", "0x11": "_OBJC_CLASS_$_Fixture", "0x12": "_OBJC_PROTOCOL_$_FixtureDelegate", @@ -82,7 +76,7 @@ const fixturePort = (): AnalysisOperationPort => ({ case "list_documents": return Promise.resolve(ok(["fixture"])); case "list_strings": - return Promise.resolve(ok(page({ "0x30": "hello" }))); + return Promise.resolve(ok(inventory({ "0x30": "hello" }))); case "analyze_function": return Promise.resolve( ok({ @@ -92,29 +86,16 @@ const fixturePort = (): AnalysisOperationPort => ({ signature: null, locals: [], }, - pseudocode: { - text: "return 0;", - total_chars: 9, - returned_chars: 9, - truncated: false, - next_offset: null, - }, - assembly: { - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }, - comments: emptyBounded(), - callers: emptyBounded(), - callees: emptyBounded(), - incoming_references: emptyBounded(), - outgoing_references: emptyBounded(), - referenced_strings: emptyBounded(), - referenced_names: emptyBounded(), - basic_blocks: emptyBounded(), - instruction_scan: { scanned: 0, truncated: false }, + pseudocode: "return 0;", + assembly: [], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [], }), ); default: @@ -123,14 +104,6 @@ const fixturePort = (): AnalysisOperationPort => ({ }, }); -const emptyBounded = () => ({ - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, -}); - const resources: Array<{ close(): Promise }> = []; afterEach(async () => { @@ -208,7 +181,7 @@ describe("enhanced MCP tools", () => { ); }); - it("accepts a final dossier page whose total exceeds returned", async () => { + it("rejects legacy paged collection wrappers", async () => { const malformedPort = fixturePort(); const client = await connect({ execute: async (name, arguments_, options) => { @@ -223,13 +196,7 @@ describe("enhanced MCP tools", () => { return result; return ok({ ...dossier, - callers: { - items: [], - total: 1, - returned: 0, - truncated: false, - next_offset: null, - }, + callers: { items: [], total: 1, returned: 0 }, }); }, }); @@ -237,6 +204,6 @@ describe("enhanced MCP tools", () => { name: "analyze_function", arguments: { procedure: "0x1" }, }); - expect(result.isError).not.toBe(true); + expect(result.isError).toBe(true); }); }); diff --git a/tests/boundary/mcp/enhancedTools.05-stops-trace-feature-at-its.test.ts b/tests/boundary/mcp/enhancedTools.inputValidation.test.ts similarity index 64% rename from tests/boundary/mcp/enhancedTools.05-stops-trace-feature-at-its.test.ts rename to tests/boundary/mcp/enhancedTools.inputValidation.test.ts index 763bfaef34..3768aead99 100644 --- a/tests/boundary/mcp/enhancedTools.05-stops-trace-feature-at-its.test.ts +++ b/tests/boundary/mcp/enhancedTools.inputValidation.test.ts @@ -1,12 +1,7 @@ import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; -import type { CallToolResult } from "@modelcontextprotocol/server"; import { afterEach, describe, expect, it } from "vitest"; import type { AnalysisOperationPort } from "../../../src/application/AnalysisProvider.js"; -import { - jsonValueSchema, - type JsonValue, -} from "../../../src/domain/jsonValue.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; @@ -19,24 +14,18 @@ const PROCEDURES = { "0x6": "prefix_TtOther", }; -const page = (values: Readonly>) => ({ - items: Object.entries(values).map(([address, value]) => ({ address, value })), - offset: 0, - limit: 100, - total: Object.keys(values).length, - next_offset: null, - has_more: false, -}); +const inventory = (values: Readonly>) => + Object.entries(values).map(([address, value]) => ({ address, value })); const fixturePort = (): AnalysisOperationPort => ({ execute: (name, arguments_) => { switch (name) { case "list_procedures": - return Promise.resolve(ok(page(PROCEDURES))); + return Promise.resolve(ok(inventory(PROCEDURES))); case "list_names": return Promise.resolve( ok( - page({ + inventory({ "0x10": "_OBJC_CLASS_$_Fixture", "0x11": "_OBJC_CLASS_$_Fixture", "0x12": "_OBJC_PROTOCOL_$_FixtureDelegate", @@ -87,7 +76,10 @@ const fixturePort = (): AnalysisOperationPort => ({ case "list_documents": return Promise.resolve(ok(["fixture"])); case "list_strings": - return Promise.resolve(ok(page({ "0x30": "hello" }))); + return Promise.resolve(ok(inventory({ "0x30": "hello" }))); + case "search_strings": + case "search_procedures": + return Promise.resolve(ok(inventory({ "0x1": "needle" }))); case "analyze_function": return Promise.resolve( ok({ @@ -155,80 +147,17 @@ const connect = async (analysis: AnalysisOperationPort = fixturePort()) => { return client; }; -const jsonResult = (result: CallToolResult): JsonValue => { - if (result.structuredContent === undefined) - throw new Error("Tool result omitted structured content"); - const structured = jsonValueSchema.safeParse(result.structuredContent); - if (!structured.success) - throw new Error("Tool structured result was not JSON"); - if ( - typeof structured.data === "object" && - structured.data !== null && - !Array.isArray(structured.data) && - "normalized_result" in structured.data - ) { - return structured.data.normalized_result ?? null; - } - if ( - typeof structured.data === "object" && - structured.data !== null && - !Array.isArray(structured.data) && - "evidence_id" in structured.data && - "result" in structured.data - ) - return structured.data.result ?? null; - const text = result.content.find((item) => item.type === "text"); - if (text?.type !== "text") - throw new Error("Tool result omitted text content"); - const decoded: unknown = JSON.parse(text.text); - const parsed = jsonValueSchema.safeParse(decoded); - if (!parsed.success) throw new Error("Tool result was not JSON"); - return parsed.data; -}; - -describe("enhanced MCP tools", () => { - it("stops trace_feature at its explicit operation budget", async () => { - let operations = 0; - const client = await connect({ - execute: () => { - operations += 1; - return Promise.resolve( - ok({ - items: [{ address: "0x1", value: "needle" }], - offset: 0, - limit: 500, - total: 2, - next_offset: 1, - has_more: true, - }), - ); - }, - }); - const result = jsonResult( - await client.callTool({ - name: "trace_feature", - arguments: { query: "needle", max_operations: 1 }, - }), - ); - expect(operations).toBe(1); - expect(result).toMatchObject({ - operations_used: 1, - operation_budget: 1, - truncated: true, - }); - expect(JSON.stringify(result)).toContain("operation budget"); - }); - - it("lets the SDK reject misspelled and out-of-range inputs", async () => { +describe("enhanced MCP input validation", () => { + it("lets the SDK reject misspelled tool inputs", async () => { const client = await connect(); const valid = await client.callTool({ name: "trace_feature", - arguments: { query: "needle", max_operations: 1 }, + arguments: { query: "needle" }, }); expect(valid.isError).not.toBe(true); const misspelled = await client.callTool({ name: "trace_feature", - arguments: { query: "needle", max_operatons: 1 }, + arguments: { query: "needle", unrecognized_option: true }, }); expect(misspelled.isError).toBe(true); expect(misspelled.structuredContent).toBeUndefined(); @@ -241,12 +170,6 @@ describe("enhanced MCP tools", () => { }); expect(nestedMisspelled.isError).toBe(true); expect(nestedMisspelled.structuredContent).toBeUndefined(); - const bounded = await client.callTool({ - name: "trace_feature", - arguments: { query: "needle", max_operations: 101 }, - }); - expect(bounded.isError).toBe(true); - expect(bounded.structuredContent).toBeUndefined(); }); it("returns a typed tool error for malformed Hopper boundary values", async () => { diff --git a/tests/boundary/mcp/evidenceBundleInline.test.ts b/tests/boundary/mcp/evidenceBundleInline.test.ts new file mode 100644 index 0000000000..d7b6a46963 --- /dev/null +++ b/tests/boundary/mcp/evidenceBundleInline.test.ts @@ -0,0 +1,45 @@ +import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; +import { expect, it } from "vitest"; + +import { createTestBinarySession } from "../../fixtures/binarySession.js"; +import { observed } from "../../fixtures/analysisExecution.js"; +import { createEvidence } from "../../../src/domain/evidence.js"; +import { createServer } from "../../../src/server/createServer.js"; + +it("returns the complete session Evidence bundle in the tool result", async () => { + const evidence = createEvidence( + undefined, + { id: "fixture", name: "Fixture", version: "1" }, + { operation: "observe", parameters: {}, result: { value: "seen" } }, + ); + const session = createTestBinarySession(() => ({ + execute: () => Promise.resolve(observed(null)), + close: () => Promise.resolve(), + })); + expect(session.recordEvidence(evidence).ok).toBe(true); + const server = createServer(session, session); + const client = new Client({ name: "inline-evidence-bundle", version: "1" }); + const [clientTransport, serverTransport] = + InMemoryTransport.createLinkedPair(); + + try { + await server.connect(serverTransport); + await client.connect(clientTransport); + const result = await client.callTool({ + name: "get_evidence_bundle", + arguments: {}, + }); + expect(result.structuredContent).toMatchObject({ + result: { + records: [ + { + evidence_id: evidence.evidence_id, + normalized_result: { value: "seen" }, + }, + ], + }, + }); + } finally { + await Promise.allSettled([client.close(), server.close(), session.close()]); + } +}); diff --git a/tests/boundary/mcp/evidenceBundleRelease.test.ts b/tests/boundary/mcp/evidenceBundleRelease.test.ts deleted file mode 100644 index 6e3e885ef7..0000000000 --- a/tests/boundary/mcp/evidenceBundleRelease.test.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; -import type { CallToolResult } from "@modelcontextprotocol/server"; -import { describe, expect, it } from "vitest"; -import { z } from "zod"; - -import { PermissionAuthority } from "../../../src/application/PermissionAuthority.js"; -import { createTestBinarySession } from "../../fixtures/binarySession.js"; -import { createPermissionPolicy } from "../../../src/domain/permissionPolicy.js"; -import { observed } from "../../fixtures/analysisExecution.js"; -import { createServer } from "../../../src/server/createServer.js"; - -const structured = (result: CallToolResult): Record => { - if (result.structuredContent === undefined) - throw new Error("expected structured MCP content"); - return result.structuredContent as Record; -}; - -const createSession = () => - createTestBinarySession(() => ({ - health: () => Promise.resolve(), - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - -describe("evidence bundle release", () => { - it("notifies snapshot observers and invalidates the retained URI", async () => { - const session = createSession(); - const server = createServer(session, session); - const client = new Client({ name: "release-test", version: "1" }); - const bundleUpdated = new Promise((resolve) => { - client.setNotificationHandler( - "notifications/resources/updated", - (notice) => { - if (notice.params.uri.startsWith("rea://evidence-bundle/")) - resolve(notice.params.uri); - }, - ); - }); - let updates = 0; - session.onAnalysisSnapshotChanged(() => { - updates += 1; - }); - const [clientTransport, serverTransport] = - InMemoryTransport.createLinkedPair(); - try { - await server.connect(serverTransport); - await client.connect(clientTransport); - const snapshot = z - .object({ - result: z.object({ - bundle_uri: z.string(), - bundle_digest: z.string(), - }), - }) - .parse( - structured( - await client.callTool({ - name: "snapshot_evidence_bundle", - arguments: {}, - }), - ), - ).result; - expect( - structured( - await client.callTool({ - name: "release_evidence_bundle", - arguments: { bundle_digest: snapshot.bundle_digest }, - }), - ).result, - ).toEqual({ - bundle_digest: snapshot.bundle_digest, - released: true, - }); - expect(updates).toBe(1); - await expect(bundleUpdated).resolves.toBe(snapshot.bundle_uri); - await expect( - client.readResource({ uri: snapshot.bundle_uri }), - ).rejects.toThrow(/not found/iu); - } finally { - await Promise.allSettled([ - client.close(), - server.close(), - session.close(), - ]); - } - }); - - it("requires evidence-write permission before releasing a bundle", async () => { - const session = createSession(); - const server = createServer(session, session, { - permissionAuthority: new PermissionAuthority(createPermissionPolicy([])), - }); - const client = new Client({ - name: "release-permission-test", - version: "1", - }); - const [clientTransport, serverTransport] = - InMemoryTransport.createLinkedPair(); - try { - await server.connect(serverTransport); - await client.connect(clientTransport); - const snapshot = z - .object({ result: z.object({ bundle_digest: z.string() }) }) - .parse( - structured( - await client.callTool({ - name: "snapshot_evidence_bundle", - arguments: {}, - }), - ), - ).result; - const release = await client.callTool({ - name: "release_evidence_bundle", - arguments: { bundle_digest: snapshot.bundle_digest }, - }); - expect(release.isError).toBe(true); - expect( - session.retainedEvidenceBundle(snapshot.bundle_digest), - ).toBeDefined(); - } finally { - await Promise.allSettled([ - client.close(), - server.close(), - session.close(), - ]); - } - }); -}); diff --git a/tests/boundary/mcp/evidenceResources.test.ts b/tests/boundary/mcp/evidenceResources.test.ts deleted file mode 100644 index 79fa11dd59..0000000000 --- a/tests/boundary/mcp/evidenceResources.test.ts +++ /dev/null @@ -1,322 +0,0 @@ -import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; -import { describe, expect, it } from "vitest"; -import { z } from "zod"; - -import { createTestBinarySession } from "../../fixtures/binarySession.js"; -import type { BinarySession } from "../../../src/application/BinarySession.js"; -import { createEvidence } from "../../../src/domain/evidence.js"; -import { observed } from "../../fixtures/analysisExecution.js"; -import { createServer } from "../../../src/server/createServer.js"; -import { createEvidenceBundle } from "../../../src/domain/evidenceBundle.js"; -import { createInvestigationWorkspace } from "../../../src/domain/investigationWorkspace.js"; -import { createResidualUnknown } from "../../../src/domain/residualUnknown.js"; - -const provider = { id: "fixture", name: "Fixture", version: "1" }; - -interface ResourceFixture { - readonly evidence: ReturnType; - readonly capture: ReturnType; - readonly workspace: ReturnType; - readonly unknown: ReturnType; -} - -function seedResourceFixture(session: BinarySession): ResourceFixture { - const evidence = createEvidence(undefined, provider, { - operation: "resource_probe", - parameters: {}, - result: { observed: true }, - }); - session.recordEvidence(evidence); - const capture = createEvidence(undefined, provider, { - operation: "capture_process_scenario", - parameters: {}, - result: { - frames: [{ sequence: 0, at_ms: 0, data: "ready" }], - protocol_events: [], - replay_transitions: [], - }, - }); - session.recordEvidence(capture); - const workspace = createInvestigationWorkspace( - "resource test", - createEvidenceBundle([]), - [], - ); - session.retainInvestigationWorkspace(workspace); - const unknown = session.recordUnknown({ - approved: true, - question: "Was every branch observed?", - severity: "medium", - domain: "control-flow", - supporting_evidence_ids: [evidence.evidence_id], - contradicting_evidence_ids: [], - required_authority: "controlled-replay", - required_confidence: "observed", - required_environment: null, - recommended_probes: [], - relationships: [], - }); - expect(unknown.ok).toBe(true); - return { evidence, capture, workspace, unknown }; -} - -async function verifyResourceProtocol( - client: Client, - fixture: ResourceFixture, -): Promise { - const { evidence, capture, workspace, unknown } = fixture; - const templates = await client.listResourceTemplates(); - expect(templates.resourceTemplates).toContainEqual( - expect.objectContaining({ uriTemplate: "rea://evidence/{evidenceId}" }), - ); - expect( - templates.resourceTemplates.map(({ uriTemplate }) => uriTemplate), - ).toEqual( - expect.arrayContaining([ - "rea://artifact/{manifestId}/{collection}", - "rea://function/{targetSha256}/{address}", - "rea://evidence-bundle/{bundleDigest}", - "rea://workspace/{workspaceId}/revision/{revision}", - ]), - ); - expect(templates.resourceTemplates).toContainEqual( - expect.objectContaining({ - uriTemplate: "rea://evidence/{evidenceId}/section/{section}", - }), - ); - const listed = await client.listResources(); - expect(listed.resources).toContainEqual( - expect.objectContaining({ uri: "rea://snapshot/current" }), - ); - expect(listed.resources).not.toContainEqual( - expect.objectContaining({ - uri: `rea://evidence/${evidence.evidence_id}`, - }), - ); - const read = await client.readResource({ - uri: `rea://evidence/${evidence.evidence_id}`, - }); - expect(read.contents).toEqual([ - expect.objectContaining({ - uri: `rea://evidence/${evidence.evidence_id}`, - mimeType: "application/json", - text: expect.stringContaining(evidence.evidence_id), - }), - ]); - const firstSnapshot = await client.callTool({ - name: "snapshot_evidence_bundle", - arguments: {}, - }); - const secondSnapshot = await client.callTool({ - name: "snapshot_evidence_bundle", - arguments: {}, - }); - expect(secondSnapshot.structuredContent).toEqual( - firstSnapshot.structuredContent, - ); - expect(firstSnapshot.content).toContainEqual( - expect.objectContaining({ - type: "text", - text: expect.stringContaining("Copy the opaque URI exactly"), - }), - ); - const bundleUri = z - .object({ result: z.object({ bundle_uri: z.string() }) }) - .parse(firstSnapshot.structuredContent).result.bundle_uri; - const retainedBundle = await client.readResource({ uri: bundleUri }); - expect(retainedBundle.contents[0]).toEqual( - expect.objectContaining({ - uri: bundleUri, - text: expect.stringContaining(evidence.evidence_id), - }), - ); - const terminal = await client.readResource({ - uri: `rea://evidence/${capture.evidence_id}/section/terminal`, - }); - const workspaceResource = await client.readResource({ - uri: `rea://workspace/${workspace.workspace_id}/revision/${String(workspace.revision)}`, - }); - expect(workspaceResource.contents[0]).toEqual( - expect.objectContaining({ - text: expect.stringContaining(workspace.revision_digest), - }), - ); - expect(terminal.contents[0]).toEqual( - expect.objectContaining({ text: expect.stringContaining("ready") }), - ); - if (unknown.ok) { - const unknownResource = await client.readResource({ - uri: `rea://unknown/${unknown.value.unknown_id}`, - }); - expect(unknownResource.contents[0]).toEqual( - expect.objectContaining({ - text: expect.stringContaining(unknown.value.revision_digest), - }), - ); - } - await expect( - client.readResource({ uri: `rea://evidence/ev_${"0".repeat(64)}` }), - ).rejects.toThrow(/not found/iu); -} - -describe("evidence MCP resources", () => { - it("publishes mutable snapshot changes for every Evidence mutation", () => { - const session = createTestBinarySession(() => ({ - health: () => Promise.resolve(), - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - let updates = 0; - session.onAnalysisSnapshotChanged(() => { - updates += 1; - }); - const first = createEvidence(undefined, provider, { - operation: "notification_probe", - parameters: {}, - result: 1, - }); - expect(session.recordEvidence(first)).toEqual({ ok: true, value: "added" }); - expect(session.recordEvidence(first)).toEqual({ - ok: true, - value: "duplicate", - }); - const importedUnknown = createResidualUnknown( - { - approved: true, - question: "Does an imported unknown publish a snapshot update?", - severity: "low", - domain: "notifications", - supporting_evidence_ids: [first.evidence_id], - contradicting_evidence_ids: [], - required_authority: "controlled-replay", - required_confidence: "observed", - required_environment: null, - recommended_probes: [], - relationships: [], - }, - first.evidence_id, - first.subject?.digest.sha256 ?? null, - ); - expect( - session.importEvidenceBundle( - createEvidenceBundle([first], [importedUnknown]), - ), - ).toEqual({ ok: true, value: 0 }); - const imported = createEvidence(undefined, provider, { - operation: "import_notification_probe", - parameters: {}, - result: 2, - }); - expect( - session.importEvidenceBundle(createEvidenceBundle([imported])), - ).toEqual({ ok: true, value: 1 }); - expect( - session.recordUnknown({ - approved: true, - question: "Does mutation publish a snapshot update?", - severity: "low", - domain: "notifications", - supporting_evidence_ids: [first.evidence_id], - contradicting_evidence_ids: [], - required_authority: "controlled-replay", - required_confidence: "observed", - required_environment: null, - recommended_probes: [], - relationships: [], - }).ok, - ).toBe(true); - expect(updates).toBe(4); - }); - - it("contains observer failures after committing a mutation", () => { - const session = createTestBinarySession(() => ({ - health: () => Promise.resolve(), - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - session.onAnalysisSnapshotChanged(() => { - throw new Error("fixture observer failure"); - }); - expect(() => - session.recordEvidence( - createEvidence(undefined, provider, { - operation: "observer_failure_probe", - parameters: {}, - result: true, - }), - ), - ).not.toThrow(); - }); -}); - -describe("evidence bundle resources", () => { - it("retains bundles without eviction and rejects a seventeenth digest", () => { - const session = createTestBinarySession(() => ({ - health: () => Promise.resolve(), - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - const first = session.snapshotEvidenceBundle(); - expect(first.ok).toBe(true); - for (let index = 0; index < 15; index += 1) { - session.recordEvidence( - createEvidence(undefined, provider, { - operation: `retention_probe_${String(index)}`, - parameters: {}, - result: index, - }), - ); - expect(session.snapshotEvidenceBundle().ok).toBe(true); - } - session.recordEvidence( - createEvidence(undefined, provider, { - operation: "retention_probe_overflow", - parameters: {}, - result: true, - }), - ); - expect(session.snapshotEvidenceBundle()).toMatchObject({ - ok: false, - error: { _tag: "EvidenceLimitError", limit: "records", maximum: 16 }, - }); - if (first.ok) { - expect(session.retainedEvidenceBundle(first.value.bundleDigest)).toEqual( - expect.any(String), - ); - expect(session.releaseEvidenceBundle(first.value.bundleDigest)).toBe( - true, - ); - expect(session.releaseEvidenceBundle(first.value.bundleDigest)).toBe( - false, - ); - expect(session.snapshotEvidenceBundle().ok).toBe(true); - } - }); - - it("lists and reads only evidence owned by the current session", async () => { - const session = createTestBinarySession(() => ({ - health: () => Promise.resolve(), - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - const fixture = seedResourceFixture(session); - const server = createServer(session, session); - const client = new Client({ - name: "evidence-resource-test", - version: "1", - }); - const [clientTransport, serverTransport] = - InMemoryTransport.createLinkedPair(); - try { - await server.connect(serverTransport); - await client.connect(clientTransport); - await verifyResourceProtocol(client, fixture); - } finally { - await Promise.allSettled([ - client.close(), - server.close(), - session.close(), - ]); - } - }, 10_000); -}); diff --git a/tests/boundary/mcp/functionComparisonMcp.test.ts b/tests/boundary/mcp/functionComparisonMcp.test.ts index 2ea6ab1ec8..0322a6eab0 100644 --- a/tests/boundary/mcp/functionComparisonMcp.test.ts +++ b/tests/boundary/mcp/functionComparisonMcp.test.ts @@ -33,8 +33,8 @@ describe("function comparison MCP integration", () => { const result = await client.callTool({ name: "compare_functions", arguments: { - left_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.left.evidence_id], - right_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.right.evidence_id], + left_evidence_id: FUNCTION_COMPARISON_EXAMPLE.left.evidence_id, + right_evidence_id: FUNCTION_COMPARISON_EXAMPLE.right.evidence_id, unknown_registry_approved: true, }, }); @@ -42,7 +42,6 @@ describe("function comparison MCP integration", () => { expect(result.structuredContent).toMatchObject({ result: { status: expect.any(String) }, evidence_id: expect.stringMatching(/^ev_[a-f0-9]{64}$/u), - evidence_uri: expect.stringMatching(/^rea:\/\/evidence\/ev_/u), }); const unknowns = await client.callTool({ name: "list_unknowns", @@ -52,15 +51,13 @@ describe("function comparison MCP integration", () => { result: { items: [ expect.objectContaining({ - unknown: expect.objectContaining({ - domain: "function-comparison", - recommended_probes: [ - expect.objectContaining({ - rationale: - "Capture complete dossiers for both functions under the same target context and analysis limits.", - }), - ], - }), + domain: "function-comparison", + recommended_probes: [ + expect.objectContaining({ + rationale: + "Capture complete dossiers for both functions under the same target context.", + }), + ], }), ], }, @@ -90,8 +87,8 @@ describe("function comparison MCP integration", () => { const result = await client.callTool({ name: "compare_functions", arguments: { - left_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.left.evidence_id], - right_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.right.evidence_id], + left_evidence_id: FUNCTION_COMPARISON_EXAMPLE.left.evidence_id, + right_evidence_id: FUNCTION_COMPARISON_EXAMPLE.right.evidence_id, }, }); expect(result.isError).toBe(true); @@ -135,8 +132,8 @@ describe("function comparison MCP integration", () => { const result = await client.callTool({ name: "compare_functions", arguments: { - left_evidence_ids: [wrong.evidence_id], - right_evidence_ids: [FUNCTION_COMPARISON_EXAMPLE.right.evidence_id], + left_evidence_id: wrong.evidence_id, + right_evidence_id: FUNCTION_COMPARISON_EXAMPLE.right.evidence_id, }, }); expect(result.isError).toBe(true); diff --git a/tests/boundary/mcp/ghidraEvidenceMcp.test.ts b/tests/boundary/mcp/ghidraEvidenceMcp.test.ts index 786441482a..954a204134 100644 --- a/tests/boundary/mcp/ghidraEvidenceMcp.test.ts +++ b/tests/boundary/mcp/ghidraEvidenceMcp.test.ts @@ -26,23 +26,17 @@ describe("Ghidra MCP evidence parity", () => { analyzer_preset: "ghidra-default", }, }, - normalized_result: { - items: [ - { - address: "0x401000", - value: "fixture_main", - procedure: { - external: false, - thunk: false, - thunk_target: null, - }, + normalized_result: [ + { + address: "0x401000", + value: "fixture_main", + procedure: { + external: false, + thunk: false, + thunk_target: null, }, - ], - total: 1, - }, - raw_result: { - items: [{ value_truncated: false }], - }, + }, + ], }); const mcpOverview = sessionEvidence( @@ -50,13 +44,13 @@ describe("Ghidra MCP evidence parity", () => { ( await mcp.callTool({ name: "binary_overview", - arguments: { detail: "detailed", limit: 5 }, + arguments: {}, }) ).structuredContent, ); const directOverview = await new EnhancedTools(session).execute( "binary_overview", - { detail: "detailed", limit: 5 }, + {}, ); expect(directOverview.ok).toBe(true); if (!directOverview.ok) return; @@ -97,7 +91,7 @@ describe("Ghidra MCP evidence parity", () => { ( await mcp.callTool({ name: "analyze_function", - arguments: { procedure: "fixture_main", include_assembly: true }, + arguments: { procedure: "fixture_main" }, }) ).structuredContent, ); @@ -114,17 +108,12 @@ describe("Ghidra MCP evidence parity", () => { provenance: "ghidra-function-manager", }, }, - pseudocode: { truncated: false }, - outgoing_references: { - items: [ - { - kind: { - available: true, - provenance: "ghidra-reference-manager", - }, - }, - ], - }, + pseudocode: "int fixture_main(void) { return 42; }", + outgoing_references: [ + { + kind: { available: true, provenance: "ghidra-reference-manager" }, + }, + ], limitations: expect.arrayContaining([ expect.stringContaining("indirect flows without target addresses"), expect.stringContaining( @@ -138,7 +127,7 @@ describe("Ghidra MCP evidence parity", () => { }); const directAnalyzed = await new EnhancedTools(session).execute( "analyze_function", - { procedure: "fixture_main", include_assembly: true }, + { procedure: "fixture_main" }, ); expect(directAnalyzed.ok).toBe(true); if (!directAnalyzed.ok) return; diff --git a/tests/boundary/mcp/ghidraMcpHarness.ts b/tests/boundary/mcp/ghidraMcpHarness.ts index 513a9fa8dd..9427c06777 100644 --- a/tests/boundary/mcp/ghidraMcpHarness.ts +++ b/tests/boundary/mcp/ghidraMcpHarness.ts @@ -16,7 +16,6 @@ import { GHIDRA_SESSION_CAPABILITIES } from "../../../src/ghidra/GhidraSessionVa import { silentLogger } from "../../../src/logger.js"; import { createServer } from "../../../src/server/createServer.js"; import { - ghidraBounded, ghidraFunctionClassification, ghidraFunctionDossier, ghidraFunctionIdentity, @@ -139,33 +138,24 @@ const resultBuilders = new Map([ ["list_documents", () => ["fixture"]], [ "list_procedures", - (_input, limit) => - page( - [ - { - address: "0x401000", - value: "fixture_main", - value_truncated: false, - procedure: { - external: false, - thunk: false, - thunk_target: null, - }, - }, - ], - limit, - ), + () => [ + { + address: "0x401000", + value: "fixture_main", + procedure: { + external: false, + thunk: false, + thunk_target: null, + }, + }, + ], ], [ "list_strings", - (_input, limit) => - page( - [ - stringItem("0x402000", "inventory fixture"), - stringItem("0x402020", "external fixture"), - ], - limit, - ), + () => [ + stringItem("0x402000", "inventory fixture"), + stringItem("0x402020", "external fixture"), + ], ], [ "list_segments", @@ -189,27 +179,22 @@ const resultBuilders = new Map([ ], [ "list_names", - (_input, limit) => - page( - [ - { - address: "0x401000", - value: "fixture_main", - value_truncated: false, - symbol: { - primary: true, - dynamic: false, - external: false, - type: "function", - source: "user_defined", - }, - }, - ], - limit, - ), + () => [ + { + address: "0x401000", + value: "fixture_main", + symbol: { + primary: true, + dynamic: false, + external: false, + type: "function", + source: "user_defined", + }, + }, + ], ], - ["search_procedures", (_input, limit) => page([], limit)], - ["search_strings", (_input, limit) => page([], limit)], + ["search_procedures", () => []], + ["search_strings", () => []], ["address_name", () => "fixture_main"], ["procedure_address", () => "0x401000"], [ @@ -240,9 +225,7 @@ const resultBuilders = new Map([ "read_function_instructions", () => ({ procedure: ghidraFunctionIdentity(), - instructions: ghidraBounded(["0x401000: CALL 0x401020", "0x401005: RET"]), - instructions_scanned: 2, - instruction_scan_truncated: false, + instructions: ["0x401000: CALL 0x401020", "0x401005: RET"], limitations: ["Ghidra-specific instruction text."], }), ], @@ -251,9 +234,7 @@ const resultBuilders = new Map([ (input, _limit) => ({ procedure: ghidraFunctionIdentity(), direction: input.direction ?? "outgoing", - references: ghidraBounded([ghidraReferenceEdge()]), - instructions_scanned: 2, - instruction_scan_truncated: false, + references: [ghidraReferenceEdge()], }), ], ["xrefs", () => ["0x401001"]], @@ -271,26 +252,15 @@ const resultFor = ( operation: GhidraOperation, input: Readonly>, ): JsonValue => { - const limit = typeof input.limit === "number" ? input.limit : 100; const builder = resultBuilders.get(operation); if (builder === undefined) throw new TypeError(`Unexpected Ghidra operation: ${operation}`); - return builder(input, limit); + return builder(input, typeof input.limit === "number" ? input.limit : 100); }; -const page = (items: readonly JsonValue[], limit: number): JsonValue => ({ - items: items.slice(0, limit), - offset: 0, - limit, - total: items.length, - next_offset: items.length > limit ? limit : null, - has_more: items.length > limit, -}); - const stringItem = (address: string, value: string): JsonValue => ({ address, value, - value_truncated: false, string: { encoding: "UTF-8", termination: "present_or_not_required", diff --git a/tests/boundary/mcp/ghidraNativeApiMcp.test.ts b/tests/boundary/mcp/ghidraNativeApiMcp.test.ts index 524b3f1057..e0f28aa485 100644 --- a/tests/boundary/mcp/ghidraNativeApiMcp.test.ts +++ b/tests/boundary/mcp/ghidraNativeApiMcp.test.ts @@ -63,20 +63,18 @@ describe("Ghidra MCP native API evidence", () => { result: { items: [ { - unknown: { - status: "open", - domain: "native-api", - question: expect.stringContaining( - "additional data sources or targets", - ), - supporting_evidence_ids: [approvedInspection.evidence_id], - recommended_probes: [ - { - operation: "inspect_native_api", - rationale: expect.stringContaining("ABI probe"), - }, - ], - }, + status: "open", + domain: "native-api", + question: expect.stringContaining( + "additional data sources or targets", + ), + supporting_evidence_ids: [approvedInspection.evidence_id], + recommended_probes: [ + { + operation: "inspect_native_api", + rationale: expect.stringContaining("ABI probe"), + }, + ], }, ], }, diff --git a/tests/boundary/mcp/ghidraRoutingMcp.test.ts b/tests/boundary/mcp/ghidraRoutingMcp.test.ts index 4f8b2e8e7e..7153d9345e 100644 --- a/tests/boundary/mcp/ghidraRoutingMcp.test.ts +++ b/tests/boundary/mcp/ghidraRoutingMcp.test.ts @@ -27,7 +27,7 @@ describe("Ghidra MCP capability routing", () => { const status = await mcp.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }); expect(status.structuredContent).toMatchObject({ result: { diff --git a/tests/boundary/mcp/investigationAnalysisMcp.test.ts b/tests/boundary/mcp/investigationAnalysisMcp.test.ts index 97f78ff5e1..44929c9ee5 100644 --- a/tests/boundary/mcp/investigationAnalysisMcp.test.ts +++ b/tests/boundary/mcp/investigationAnalysisMcp.test.ts @@ -75,7 +75,7 @@ it("builds a zero-hop exact-address path with dossier citations", async () => { normalized_result: { status: "found", shortest_hops: 0, - paths: { total: 1 }, + paths: [expect.objectContaining({ hops: 0 })], }, evidence_links: [FUNCTION_COMPARISON_EXAMPLE.left.evidence_id], }); @@ -104,13 +104,7 @@ it("records a safe unresolved call-path question", async () => { parameters: base.parameters, result: jsonValueSchema.parse({ ...jsonObjectSchema.parse(base.normalized_result), - callees: { - items: [{ address: "0x2000", name: "next" }], - total: 1, - returned: 1, - truncated: false, - next_offset: null, - }, + callees: [{ address: "0x2000", name: "next" }], }), rawResult: base.raw_result, confidence: base.confidence, @@ -175,7 +169,7 @@ it("records an explicit non-causal static/runtime hypothesis", async () => { } }); -it("records a safe unresolved static/runtime question", async () => { +it("uses inline assembly observations without recording a false unknown", async () => { const { session, server, client } = await connected(); for (const evidence of [ FUNCTION_COMPARISON_EXAMPLE.left, @@ -209,11 +203,7 @@ it("records a safe unresolved static/runtime question", async () => { expect(response.isError).not.toBe(true); expect( session.listUnknowns({ domain: "static-runtime-correlation" }), - ).toMatchObject([ - { - question: "Does runtime behavior match the available static analysis?", - }, - ]); + ).toEqual([]); } finally { await close(session, server, client); } diff --git a/tests/boundary/mcp/investigationWorkspaceMcp.test.ts b/tests/boundary/mcp/investigationWorkspaceMcp.test.ts index 52d9c45c86..da78945674 100644 --- a/tests/boundary/mcp/investigationWorkspaceMcp.test.ts +++ b/tests/boundary/mcp/investigationWorkspaceMcp.test.ts @@ -107,26 +107,9 @@ it("runs and reuses a persistent cross-version workspace", async () => { ok: true, value: { revision: 3, runs: [{ status: "complete" }] }, }); - expect(first.content).toContainEqual( - expect.objectContaining({ - type: "resource_link", - uri: expect.stringMatching( - /^rea:\/\/workspace\/ws_[a-f0-9]{64}\/revision\/3$/u, - ), - }), + expect(firstEvidence.normalized_result).toHaveProperty( + "investigation_run.workspace_id", ); - const retainedWorkspace = session.investigationWorkspaces()[0]; - expect(retainedWorkspace).toBeDefined(); - if (retainedWorkspace !== undefined) { - const resource = await client.readResource({ - uri: `rea://workspace/${retainedWorkspace.workspace_id}/revision/${String(retainedWorkspace.revision)}`, - }); - expect(resource.contents[0]).toEqual( - expect.objectContaining({ - text: expect.stringContaining(retainedWorkspace.revision_digest), - }), - ); - } const second = await client.callTool({ name: "find_changed_behavior", @@ -166,7 +149,7 @@ it("replays a complete workspace without write authority", async () => { }, }; const writer = await investigationAuthority(directory, true); - const initial = await connected(filePolicy, [directory], writer); + const initial = await connected(filePolicy, writer); try { const created = await initial.client.callTool({ name: "find_changed_behavior", @@ -178,7 +161,7 @@ it("replays a complete workspace without write authority", async () => { } const reader = await investigationAuthority(directory, false); - const replay = await connected(filePolicy, [directory], reader); + const replay = await connected(filePolicy, reader); try { const cached = await replay.client.callTool({ name: "find_changed_behavior", @@ -229,7 +212,7 @@ it("defers input permission for an explicit replay with deleted inputs", async ( options: { page_size: 500, change_limit: 100 }, }; const writer = await investigationAuthority(directory, true); - const initial = await connected(filePolicy, [directory], writer); + const initial = await connected(filePolicy, writer); let runId: string | undefined; try { const created = await initial.client.callTool({ @@ -256,14 +239,10 @@ it("defers input permission for an explicit replay with deleted inputs", async ( ]); const workspaceOnly = await permissionAuthorityForRoot( directory, - [ - "investigation_workspace_read", - "investigation_workspace_write", - "investigation_input", - ], + ["investigation_workspace_read", "investigation_workspace_write"], ["investigation_workspace_read"], ); - const replay = await connected(filePolicy, [], workspaceOnly); + const replay = await connected(filePolicy, workspaceOnly); try { const cached = await replay.client.callTool({ name: "find_changed_behavior", @@ -284,49 +263,8 @@ it("defers input permission for an explicit replay with deleted inputs", async ( } }); -it("refuses automatic artifact reads outside operator-approved roots", async () => { - const directory = await createTestTempDirectory("rea-investigation-mcp-"); - const approvedInputs = join(directory, "approved-inputs"); - const outsideInputs = join(directory, "outside-inputs"); - const evidenceRoot = join(directory, "evidence"); - await Promise.all([ - mkdir(approvedInputs), - mkdir(outsideInputs), - mkdir(evidenceRoot), - ]); - const left = join(outsideInputs, "left"); - const right = join(outsideInputs, "right"); - await Promise.all([mkdir(left), mkdir(right)]); - const { session, server, client } = await connected( - evidencePolicy(evidenceRoot), - [approvedInputs], - ); - try { - const response = await client.callTool({ - name: "find_changed_behavior", - arguments: { - investigation_run: { - approved: true, - workspace_path: join(evidenceRoot, "workspace.json"), - left_path: left, - right_path: right, - }, - }, - }); - expect(response.isError).toBe(true); - expect(response.content[0]).toEqual({ - type: "text", - text: JSON.stringify(response.structuredContent), - }); - } finally { - await close(session, server, client); - await rm(directory, { recursive: true, force: true }); - } -}); - const connected = async ( evidenceFilePolicy?: EvidenceFilePolicy, - investigationInputRoots: readonly string[] = evidenceFilePolicy?.roots ?? [], permissionAuthority?: PermissionAuthority, ) => { const session = createTestBinarySession(() => ({ @@ -335,12 +273,7 @@ const connected = async ( close: () => Promise.resolve(), })); const server = createServer(session, session, { - ...(evidenceFilePolicy === undefined - ? {} - : { - evidenceFilePolicy, - investigationInputRoots, - }), + ...(evidenceFilePolicy === undefined ? {} : { evidenceFilePolicy }), ...(permissionAuthority === undefined ? {} : { permissionAuthority }), }); const client = new Client({ name: "investigation-test", version: "1" }); @@ -374,14 +307,9 @@ const investigationAuthority = async ( ): Promise => permissionAuthorityForRoot( root, + ["investigation_workspace_read", "investigation_workspace_write"], [ "investigation_workspace_read", - "investigation_workspace_write", - "investigation_input", - ], - [ - "investigation_workspace_read", - "investigation_input", ...(includeWrite ? (["investigation_workspace_write"] as const) : []), ], ); diff --git a/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts b/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts index 370c0c068d..70c7fc8f67 100644 --- a/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts +++ b/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts @@ -78,7 +78,7 @@ describe("JavaScript runtime observation MCP tools", () => { expect(listed.isError).not.toBe(true); expect(listed.structuredContent).toMatchObject({ result: { - targets: { items: [{ target_id: inspector.targetId }] }, + targets: [{ target_id: inspector.targetId }], }, }); diff --git a/tests/boundary/mcp/managedMcp.test.ts b/tests/boundary/mcp/managedMcp.test.ts index 3ca4f91278..0385efa155 100644 --- a/tests/boundary/mcp/managedMcp.test.ts +++ b/tests/boundary/mcp/managedMcp.test.ts @@ -121,13 +121,11 @@ const verifyManagedCatalogAndNativeWorkflow = async ( MANAGED_NATIVE_VERIFICATION_EXAMPLE.native_observations.map( ({ evidence_id: evidenceId }) => evidenceId, ), - limits: MANAGED_NATIVE_VERIFICATION_EXAMPLE.limits, }, }), ); expect(verified).toMatchObject({ evidence_id: expect.stringMatching(/^ev_[a-f0-9]{64}$/u), - evidence_uri: expect.stringMatching(/^rea:\/\/evidence\/ev_/u), result: { summary: { verified: 1 }, algorithm: { token_to_address_mapping: "not-inferred" }, @@ -163,13 +161,13 @@ const inspectManagedStaticWorkflow = async ( const inspected = structured( await client.callTool({ name: "inspect_managed_artifact", - arguments: { path, reference_limit: 1 }, + arguments: { path }, }), ); expect(inspected).toMatchObject({ result: { classification: { status: "managed", runtime_family: "modern-dotnet" }, - references: { limit: 1 }, + references: [expect.objectContaining({ name: "System.Runtime" })], }, }); const members = sessionEvidence( @@ -177,7 +175,7 @@ const inspectManagedStaticWorkflow = async ( structured( await client.callTool({ name: "inspect_managed_members", - arguments: { method_limit: 1 }, + arguments: {}, }), ), ); @@ -187,22 +185,26 @@ const inspectManagedStaticWorkflow = async ( subject: { local_path: path, format: "pe" }, normalized_result: { identity_scope: { token_identity: "build-local" }, - methods: { total: 1, returned: 1 }, - call_edges: { total: 1 }, - field_accesses: { total: 1 }, + methods: [expect.objectContaining({ token: expect.any(String) })], + call_edges: [ + expect.objectContaining({ target_token: expect.any(String) }), + ], + field_accesses: [ + expect.objectContaining({ field_token: expect.any(String) }), + ], }, }); const boundaries = structured( await client.callTool({ name: "inspect_managed_native_boundaries", - arguments: { import_limit: 1 }, + arguments: {}, }), ); expect(boundaries).toMatchObject({ result: { identity_scope: { token_identity: "build-local" }, - pinvoke_imports: { total: 0, limit: 1 }, - native_implementations: { total: 0 }, + pinvoke_imports: [], + native_implementations: [], }, }); return members; @@ -210,19 +212,17 @@ const inspectManagedStaticWorkflow = async ( const methodFrom = (members: Record) => z - .object({ - items: z.array( - z.object({ - token: z.string(), - signature: z.object({ raw_sha256: z.string() }), - body: z.object({ normalized_il_sha256: z.string().nullable() }), - }), - ), - }) + .array( + z.object({ + token: z.string(), + signature: z.object({ raw_sha256: z.string() }), + body: z.object({ normalized_il_sha256: z.string().nullable() }), + }), + ) .parse( z.record(z.string(), z.unknown()).parse(members.normalized_result) .methods, - ).items[0]; + )[0]; const verifyManagedComparisonAndReconstruction = async ( client: Client, @@ -239,7 +239,7 @@ const verifyManagedComparisonAndReconstruction = async ( structured( await client.callTool({ name: "inspect_managed_members", - arguments: { method_limit: 1 }, + arguments: {}, }), ), ); @@ -251,11 +251,6 @@ const verifyManagedComparisonAndReconstruction = async ( arguments: { left_evidence_id: members.evidence_id, right_evidence_id: right.evidence_id, - limits: { - max_method_matches: 100, - max_field_matches: 100, - max_candidates: 10, - }, }, }), ), diff --git a/tests/boundary/mcp/officialTools.test.ts b/tests/boundary/mcp/officialTools.test.ts index ebd3959de4..ceb751867b 100644 --- a/tests/boundary/mcp/officialTools.test.ts +++ b/tests/boundary/mcp/officialTools.test.ts @@ -74,18 +74,11 @@ const connect = async (analysis: AnalysisOperationPort) => { return client; }; -const page: JsonValue = { - items: [], - offset: 0, - limit: 100, - total: 0, - next_offset: null, - has_more: false, -}; +const inventory: JsonValue = []; const outputFor = (name: string): JsonValue => { if (["list_procedures", "list_names", "list_strings"].includes(name)) - return page; + return inventory; if (["address_name", "comment", "inline_comment"].includes(name)) return null; if (["procedure_callees", "procedure_callers", "xrefs"].includes(name)) return []; @@ -102,7 +95,7 @@ const outputFor = (name: string): JsonValue => { ) return true; if (name === "set_addresses_names") return { "0x1000": true }; - if (["search_procedures", "search_strings"].includes(name)) return page; + if (["search_procedures", "search_strings"].includes(name)) return inventory; if (name === "procedure_info") return { name: "main", @@ -121,15 +114,7 @@ const outputFor = (name: string): JsonValue => { if (name === "read_function_instructions") return { procedure: { address: "0x1000", name: "main" }, - instructions: { - items: ["0x1000: ret"], - total: 1, - returned: 1, - truncated: false, - next_offset: null, - }, - instructions_scanned: 1, - instruction_scan_truncated: false, + instructions: ["0x1000: ret"], limitations: ["Provider-specific instruction text."], }; if (name === "read_bytes") @@ -146,15 +131,7 @@ const outputFor = (name: string): JsonValue => { return { procedure: { address: "0x1000", name: "main" }, direction: "outgoing", - references: { - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }, - instructions_scanned: 1, - instruction_scan_truncated: false, + references: [], }; return name.includes("address") ? "0x1000" : "fixture"; }; @@ -191,11 +168,6 @@ describe("official Hopper proxy tools", () => { arguments: VALID_INPUTS[contract.name], }); expect(result.isError).not.toBe(true); - expect(result.content).not.toEqual( - expect.arrayContaining([ - expect.objectContaining({ type: "resource_link" }), - ]), - ); } expect(invocations.map(({ name }) => name)).toEqual( @@ -213,8 +185,6 @@ describe("official Hopper proxy tools", () => { pattern: "main", mode: "literal", case_sensitive: false, - offset: 0, - limit: 100, document: null, }); }); @@ -233,4 +203,72 @@ describe("official Hopper proxy tools", () => { text: JSON.stringify(result.structuredContent), }); }); + + it("returns every procedure inline without caller-authored page calls", async () => { + const invocations: Invocation[] = []; + const client = await connect({ + execute: (name, arguments_) => { + invocations.push({ name, arguments_ }); + return Promise.resolve( + ok([ + { address: "0x1", value: "procedure" }, + { address: "0x2", value: "procedure" }, + ]), + ); + }, + }); + + const result = await client.callTool({ + name: "list_procedures", + arguments: {}, + }); + + expect(result.structuredContent).toMatchObject({ + result: [ + { address: "0x1", value: "procedure" }, + { address: "0x2", value: "procedure" }, + ], + }); + expect(invocations).toHaveLength(1); + expect(invocations[0]?.arguments_).toEqual({ document: null }); + expect( + (await client.listTools()).tools.find( + ({ name }) => name === "list_procedures", + )?.inputSchema, + ).not.toHaveProperty("properties.offset"); + }); + + it("returns every search match inline in one provider call", async () => { + const invocations: Invocation[] = []; + const client = await connect({ + execute: (name, arguments_) => { + invocations.push({ name, arguments_ }); + return Promise.resolve( + ok([ + { address: "0x1", value: "coffee" }, + { address: "0x2", value: "coffee" }, + ]), + ); + }, + }); + + const result = await client.callTool({ + name: "search_strings", + arguments: { pattern: "coffee" }, + }); + + expect(result.structuredContent).toMatchObject({ + result: [ + { address: "0x1", value: "coffee" }, + { address: "0x2", value: "coffee" }, + ], + }); + expect(invocations).toHaveLength(1); + expect(invocations[0]?.arguments_).toMatchObject({ pattern: "coffee" }); + expect( + (await client.listTools()).tools.find( + ({ name }) => name === "search_strings", + )?.inputSchema, + ).not.toHaveProperty("properties.offset"); + }); }); diff --git a/tests/boundary/mcp/processCaptureElicitation.test.ts b/tests/boundary/mcp/processCaptureElicitation.test.ts index a421ec9d63..b28c65a8fe 100644 --- a/tests/boundary/mcp/processCaptureElicitation.test.ts +++ b/tests/boundary/mcp/processCaptureElicitation.test.ts @@ -70,21 +70,15 @@ describe("process-capture MCP elicitation handshake", () => { }); try { await client.connect(clientTransport); - const identity = await client.readResource({ - uri: "rea://server/identity", - }); - const identityContent = identity.contents[0]; - if (identityContent === undefined || !("text" in identityContent)) - throw new Error("missing modern server identity resource"); - expect(JSON.parse(identityContent.text)).toMatchObject({ - client: { name: "process-elicit", version: "1" }, - }); const status = await client.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }); expect(status.structuredContent).toMatchObject({ result: { + server_identity: { + client: { name: "process-elicit", version: "1" }, + }, client_features: { elicitation_form: true, elicitation_url: false, diff --git a/tests/boundary/mcp/processTraceAdaptersParity.test.ts b/tests/boundary/mcp/processTraceAdaptersParity.test.ts index 3c10814953..10ea544e62 100644 --- a/tests/boundary/mcp/processTraceAdaptersParity.test.ts +++ b/tests/boundary/mcp/processTraceAdaptersParity.test.ts @@ -82,7 +82,7 @@ const traceSpecification: ProcessTraceSpecification = { const captureEvidence = (side: "left" | "right") => createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-capture/v4", + predicateType: "rea.process-capture", operation: "capture_process_scenario", parameters: { side }, result: jsonValueSchema.parse(capture), diff --git a/tests/boundary/mcp/promptCompletion.test.ts b/tests/boundary/mcp/promptCompletion.test.ts index 1697e8791f..3fadadc4b8 100644 --- a/tests/boundary/mcp/promptCompletion.test.ts +++ b/tests/boundary/mcp/promptCompletion.test.ts @@ -21,7 +21,7 @@ afterEach(async () => { }); describe("guided prompt completion from live analysis", () => { - it("reads live documents and paged procedures without ambiguous names", async () => { + it("reads live documents and complete procedures without ambiguous names", async () => { const requests: Array>> = []; const session = createTestBinarySession(() => client(requests)); directory = await createTestTempDirectory("rea-prompt-completion-"); @@ -39,10 +39,7 @@ describe("guided prompt completion from live analysis", () => { arguments: { document: "App" }, }), ).toEqual(["0x1000", "0x2000", "0x3000", "0x4000", "tail", "unique"]); - expect(requests).toEqual([ - { offset: 0, limit: 500, document: "App" }, - { offset: 2, limit: 500, document: "App" }, - ]); + expect(requests).toEqual([{ document: "App" }]); expect(await completion.complete("provider", "uni")).toEqual([ "unidentified", ]); @@ -62,7 +59,7 @@ describe("guided prompt completion from investigation records", () => { const invalidCapture = createEvidence(undefined, fixtureProvider, { operation: "capture_process_scenario", parameters: {}, - result: { schema_version: 4 }, + result: {}, confidence: "observed", authority: "controlled-replay", environment: fixtureEnvironment, @@ -156,65 +153,24 @@ describe("guided prompt completion from investigation records", () => { }); }); -describe("guided prompt completion validation and limits", () => { - it("does not offer procedure names from an incomplete discovery", async () => { - let calls = 0; - const completion = createPromptCompletionSource({ - execute() { - calls += 1; - return Promise.resolve( - observed( - calls === 1 - ? page(0, [{ address: "0x1000", value: "possibly_ambiguous" }], 1) - : null, - ), - ); - }, - }); - expect(await completion.complete("procedure", "")).toEqual(["0x1000"]); - }); - - it("bounds procedure scans and rejects non-advancing continuation metadata", async () => { +describe("guided prompt completion from complete inventories", () => { + it("reads every procedure in one provider call", async () => { let calls = 0; + const procedures = Array.from({ length: 6_000 }, (_, address) => ({ + address: `0x${address.toString(16).padStart(8, "0")}`, + value: `procedure_${String(address)}`, + })); const bounded = createPromptCompletionSource({ execute(_operation, parameters) { calls += 1; - const offset = Number(parameters.offset); - const items = Array.from({ length: 500 }, (_, index) => { - const address = offset + index; - return { - address: `0x${address.toString(16).padStart(8, "0")}`, - value: `procedure_${String(address)}`, - }; - }); - return Promise.resolve( - observed({ - items, - offset, - limit: 500, - total: 6_000, - next_offset: offset + 500, - has_more: true, - }), - ); + expect(parameters).toEqual({}); + return Promise.resolve(observed(procedures)); }, }); const values = await bounded.complete("procedure", ""); - expect(calls).toBe(10); - expect(values).toHaveLength(5_000); - expect(values.every((value) => value.startsWith("0x"))).toBe(true); - - let nonAdvancingCalls = 0; - const nonAdvancing = createPromptCompletionSource({ - execute() { - nonAdvancingCalls += 1; - return Promise.resolve( - observed(page(0, [{ address: "0x5000", value: "unsafe_name" }], 0)), - ); - }, - }); - expect(await nonAdvancing.complete("procedure", "")).toEqual(["0x5000"]); - expect(nonAdvancingCalls).toBe(1); + expect(calls).toBe(1); + expect(values).toHaveLength(12_000); + expect(values).toContain("0x00000000"); }); it("normalizes Unicode prefixes while preserving distinct exact identifiers", async () => { @@ -258,43 +214,16 @@ const client = ( return Promise.resolve(observed(["AppTests", "App", "App"])); if (operation === "list_procedures") { requests.push(parameters); - const offset = parameters.offset; return Promise.resolve( - observed( - offset === 0 - ? page( - 0, - [ - { address: "0x1000", value: "duplicate" }, - { address: "0x2000", value: "unique" }, - ], - 2, - ) - : page( - 2, - [ - { address: "0x3000", value: "duplicate" }, - { address: "0x4000", value: "tail" }, - ], - null, - ), - ), + observed([ + { address: "0x1000", value: "duplicate" }, + { address: "0x2000", value: "unique" }, + { address: "0x3000", value: "duplicate" }, + { address: "0x4000", value: "tail" }, + ]), ); } return Promise.resolve(observed(null)); }, close: () => Promise.resolve(), }); - -const page = ( - offset: number, - items: readonly { readonly address: string; readonly value: string }[], - nextOffset: number | null, -) => ({ - items, - offset, - limit: 500, - total: 4, - next_offset: nextOffset, - has_more: nextOffset !== null, -}); diff --git a/tests/boundary/mcp/promptMcp.test.ts b/tests/boundary/mcp/promptMcp.test.ts index 0b42fb5a24..392ffcdf2e 100644 --- a/tests/boundary/mcp/promptMcp.test.ts +++ b/tests/boundary/mcp/promptMcp.test.ts @@ -376,19 +376,12 @@ const lifecycleClient = ( if (operation === "list_procedures") { requests.push(parameters); return Promise.resolve( - observed({ - items: [ - { - address: target === "first" ? "0x1000" : "0x2000", - value: `${target}-procedure`, - }, - ], - offset: 0, - limit: 500, - total: 1, - next_offset: null, - has_more: false, - }), + observed([ + { + address: target === "first" ? "0x1000" : "0x2000", + value: `${target}-procedure`, + }, + ]), ); } return Promise.resolve(observed(null)); diff --git a/tests/boundary/mcp/providerSelectionMcp.test.ts b/tests/boundary/mcp/providerSelectionMcp.test.ts index d1833c0eff..8a6b9833ae 100644 --- a/tests/boundary/mcp/providerSelectionMcp.test.ts +++ b/tests/boundary/mcp/providerSelectionMcp.test.ts @@ -57,7 +57,7 @@ describe("provider selection over MCP", () => { const before = structured( await mcp.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }), ); expect(before.result).toMatchObject({ @@ -124,7 +124,7 @@ describe("provider selection over MCP", () => { const status = structured( await mcp.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }), ); expect(status.result).toMatchObject({ @@ -157,7 +157,7 @@ describe("provider selection over MCP", () => { structured( await mcp.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }), ).result, ).toMatchObject({ @@ -192,7 +192,6 @@ const candidate = (id: string, starts: string[]): AnalysisProviderCandidate => { ok({ profile: createAnalysisProfile( { id, name: identity.name, version: "1" }, - 1, { fixture: id }, ), compatibility: {}, @@ -219,8 +218,6 @@ const candidate = (id: string, starts: string[]): AnalysisProviderCandidate => { const capability = (provider: ProviderIdentity): CapabilityDescriptor => ({ provider, operation: "address_name", - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", diff --git a/tests/boundary/mcp/reconstructionCoverageMcp.test.ts b/tests/boundary/mcp/reconstructionCoverageMcp.test.ts index 48919022f1..918aeb457a 100644 --- a/tests/boundary/mcp/reconstructionCoverageMcp.test.ts +++ b/tests/boundary/mcp/reconstructionCoverageMcp.test.ts @@ -65,16 +65,10 @@ describe("reconstruction coverage MCP parity", () => { revision: 1, revision_sha256: workspace.revision_sha256, }); - const resourceUri = `rea://reconstruction-coverage/${workspace.workspace_id}/revision/1`; - expect(committed.content).toContainEqual( - expect.objectContaining({ type: "resource_link", uri: resourceUri }), - ); - const resource = await client.readResource({ uri: resourceUri }); - expect(resource.contents[0]).toEqual( - expect.objectContaining({ - text: expect.stringContaining(workspace.revision_sha256), - }), - ); + expect(committed.structuredContent).toMatchObject({ + workspace_id: workspace.workspace_id, + revision_sha256: workspace.revision_sha256, + }); const queried = await client.callTool({ name: "query_reconstruction_coverage", arguments: { diff --git a/tests/boundary/mcp/reconstructionObligationLedgerMcp.test.ts b/tests/boundary/mcp/reconstructionObligationLedgerMcp.test.ts index 679cd427bd..993023197c 100644 --- a/tests/boundary/mcp/reconstructionObligationLedgerMcp.test.ts +++ b/tests/boundary/mcp/reconstructionObligationLedgerMcp.test.ts @@ -7,7 +7,7 @@ import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; describe("reconstruction obligation ledger MCP parity", () => { - it("builds an Evidence-backed page and exposes the retained resource", async () => { + it("returns an Evidence-backed page inline", async () => { const session = createTestBinarySession(() => ({ execute: () => Promise.resolve(observed(null)), close: () => Promise.resolve(), @@ -25,44 +25,24 @@ describe("reconstruction obligation ledger MCP parity", () => { evidence_bundle: createEvidenceBundle([]), reviewed_obligations: [], manifest: { - schema_version: 1, bindings: [], contradictions: [], }, - limits: { max_obligations: 100 }, page: { offset: 0, limit: 50 }, }, }); expect(result.isError).not.toBe(true); expect(result.structuredContent).toMatchObject({ evidence_id: expect.stringMatching(/^ev_[a-f0-9]{64}$/u), - evidence_uri: expect.stringMatching( - /^rea:\/\/evidence\/ev_[a-f0-9]{64}$/u, - ), result: { schema: "ReconstructionObligationLedger", status: "unknown", summary: { total: 0 }, }, }); - const evidence = result.structuredContent; - if ( - evidence === undefined || - evidence === null || - typeof evidence !== "object" || - !("evidence_id" in evidence) || - typeof evidence.evidence_id !== "string" - ) - throw new TypeError("Missing obligation ledger Evidence ID"); - const resource = await client.readResource({ - uri: `rea://evidence/${evidence.evidence_id}/reconstruction-obligation-ledger`, - }); - expect(resource.contents[0]).toEqual( - expect.objectContaining({ - text: expect.stringContaining( - '"schema": "ReconstructionObligationLedger"', - ), - }), + expect(result.structuredContent).toHaveProperty( + "result.schema", + "ReconstructionObligationLedger", ); } finally { await client.close(); diff --git a/tests/boundary/mcp/reconstructionReadinessMcp.test.ts b/tests/boundary/mcp/reconstructionReadinessMcp.test.ts index f9f5f0f4ca..e319aee493 100644 --- a/tests/boundary/mcp/reconstructionReadinessMcp.test.ts +++ b/tests/boundary/mcp/reconstructionReadinessMcp.test.ts @@ -7,7 +7,7 @@ import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; describe("reconstruction readiness MCP parity", () => { - it("returns a passing compact result and retains the full report resource", async () => { + it("returns the complete passing report inline", async () => { const session = createTestBinarySession(() => ({ execute: () => Promise.resolve(observed(null)), close: () => Promise.resolve(), @@ -30,31 +30,13 @@ describe("reconstruction readiness MCP parity", () => { schema: "ReconstructionReadinessReport", status: "pass", summary: { passed_required_stages: 9 }, - report_resource_uri: expect.stringMatching( - /^rea:\/\/evidence\/ev_[a-f0-9]{64}\/reconstruction-readiness-report$/u, - ), + stages: expect.arrayContaining([expect.any(Object)]), }, }); - expect(result.structuredContent).not.toHaveProperty("result.snapshot"); - expect(result.structuredContent).not.toHaveProperty("result.stages"); - const content = result.structuredContent; - if ( - content === undefined || - content === null || - typeof content !== "object" || - !("evidence_id" in content) || - typeof content.evidence_id !== "string" - ) - throw new TypeError("Missing readiness Evidence ID"); - const resource = await client.readResource({ - uri: `rea://evidence/${content.evidence_id}/reconstruction-readiness-report`, - }); - expect(resource.contents[0]).toEqual( - expect.objectContaining({ - text: expect.stringContaining( - '"schema": "ReconstructionReadinessReport"', - ), - }), + expect(result.structuredContent).toHaveProperty("result.snapshot"); + expect(result.structuredContent).toHaveProperty("result.stages"); + expect(result.structuredContent).not.toHaveProperty( + "result.report_resource_uri", ); } finally { await client.close(); diff --git a/tests/boundary/mcp/replayMachineMcp.test.ts b/tests/boundary/mcp/replayMachineMcp.test.ts index a09c6e9fe4..d6246fb21b 100644 --- a/tests/boundary/mcp/replayMachineMcp.test.ts +++ b/tests/boundary/mcp/replayMachineMcp.test.ts @@ -27,7 +27,6 @@ describe("direct replay machine MCP parity", () => { expect(result).toMatchObject({ structuredContent: { result: { - schema_version: 1, final_state: "complete", terminal: true, decisions: [{ outcome: "matched", transition_sequence: 0 }], diff --git a/tests/boundary/mcp/serverIdentity.test.ts b/tests/boundary/mcp/serverIdentity.test.ts index 04b13fccc8..8a32c401a6 100644 --- a/tests/boundary/mcp/serverIdentity.test.ts +++ b/tests/boundary/mcp/serverIdentity.test.ts @@ -11,7 +11,6 @@ import { import { PACKAGE_METADATA } from "../../../src/generatedPackageMetadata.js"; import { PRODUCT_IDENTITY, SDK_IDENTITY } from "../../../src/identity.js"; import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; -import { TOOL_KINDS } from "../../../src/contracts/toolContractTypes.js"; import { createServer } from "../../../src/server/createServer.js"; import { createServerIdentity } from "../../../src/serverIdentity.js"; import { observed } from "../../fixtures/analysisExecution.js"; @@ -26,8 +25,6 @@ const availabilityProvider = (): AnalysisProvider => { const capability: CapabilityDescriptor = { provider: identity, operation: "current_address", - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", @@ -118,8 +115,6 @@ describe("server and catalog identity", () => { cli_commands: 68, mcp_tools: TOOL_CONTRACTS.length, mcp_prompts: 6, - mcp_resources: 2, - mcp_resource_templates: 11, }); expect(CATALOG_IDENTITY.digests.combined_sha256).toMatch(/^[a-f0-9]{64}$/u); }); @@ -238,7 +233,6 @@ describe("live server identity over MCP", () => { await client.connect(clientTransport); await assertLiveIdentity(client); await assertSessionIdentity(client); - await assertCapabilityViews(client); expect( (await client.listTools()).tools.map(({ name }) => name), ).toContain("current_address"); @@ -269,29 +263,30 @@ const assertLiveIdentity = async (client: Client): Promise => { expect(instructions).toContain( "native binary/database -> open_binary, then binary_overview", ); - expect(instructions).toContain("Never repeat identical analysis"); - expect(instructions).toContain("cite Evidence IDs"); - const resource = await client.readResource({ uri: "rea://server/identity" }); - const content = resource.contents[0]; - expect(content).toBeDefined(); - if (content === undefined || !("text" in content)) - throw new Error("missing identity resource text"); - expect(JSON.parse(content.text)).toMatchObject({ - package: { version: PRODUCT_IDENTITY.packageVersion }, - server: { version: PRODUCT_IDENTITY.packageVersion }, - sdk: { - server: SDK_IDENTITY.server, - client_test: PACKAGE_METADATA.clientSdkVersion, + const identity = await client.callTool({ + name: "binary_session", + arguments: {}, + }); + expect(identity.structuredContent).toMatchObject({ + result: { + server_identity: { + package: { version: PRODUCT_IDENTITY.packageVersion }, + server: { version: PRODUCT_IDENTITY.packageVersion }, + sdk: { + server: SDK_IDENTITY.server, + client_test: PACKAGE_METADATA.clientSdkVersion, + }, + client: null, + alignment: { state: "unknown" }, + }, }, - client: null, - alignment: { state: "unknown" }, }); }; const assertSessionIdentity = async (client: Client): Promise => { const status = await client.callTool({ name: "binary_session", - arguments: { detail: "full", expected_package_version: "1.2.0" }, + arguments: { expected_package_version: "1.2.0" }, }); expect(status.structuredContent).toMatchObject({ result: { @@ -328,11 +323,9 @@ const assertSessionIdentity = async (client: Client): Promise => { }), expect.objectContaining({ name: "analyze_javascript_application", - available: false, - reason: "policy_disabled", - remediation: expect.stringContaining( - "REA_INVESTIGATION_INPUT_ROOTS_JSON", - ), + available: true, + reason: "available", + remediation: null, }), ]), client_features: { @@ -343,76 +336,4 @@ const assertSessionIdentity = async (client: Client): Promise => { }, }, }); - const summary = await client.callTool({ - name: "binary_session", - arguments: { expected_package_version: "1.2.0" }, - }); - expect(summary.structuredContent).toMatchObject({ - result: { - view: "summary", - open: false, - target: null, - alignment: { state: "mcp_server_restart_required" }, - recommended_actions: expect.arrayContaining([ - "For a supplied target, route by format: ASAR/JavaScript to analyze_javascript_application; archive/package to open_binary(path), then inspect_artifact or inventory_artifact on the active target; managed PE/CLI to inspect_managed_artifact; browser/Electron runtimes to their list-target tools; native binaries to open_binary.", - ]), - }, - }); - expect(JSON.stringify(summary.structuredContent)).not.toContain( - "tool_availability", - ); -}; - -const assertCapabilityViews = async (client: Client): Promise => { - const capabilities = await client.callTool({ - name: "binary_session", - arguments: { - detail: "capabilities", - capability_family: "browser-provider", - cursor: 0, - limit: 1, - }, - }); - expect(capabilities.structuredContent).toMatchObject({ - result: { - view: "capabilities", - capability_family: "browser-provider", - capabilities: { - items: [expect.objectContaining({ surface: "browser-provider" })], - cursor: 0, - limit: 1, - total: expect.any(Number), - next_cursor: expect.any(Number), - has_more: true, - }, - client_features: { - elicitation_form: false, - elicitation_url: false, - roots: false, - sampling: false, - }, - }, - }); - for (const capabilityFamily of TOOL_KINDS) { - const familyCapabilities = await client.callTool({ - name: "binary_session", - arguments: { - detail: "capabilities", - capability_family: capabilityFamily, - limit: 100, - }, - }); - expect(familyCapabilities.structuredContent).toMatchObject({ - result: { - view: "capabilities", - capability_family: capabilityFamily, - capabilities: { - items: expect.arrayContaining([ - expect.objectContaining({ surface: capabilityFamily }), - ]), - total: expect.any(Number), - }, - }, - }); - } }; diff --git a/tests/boundary/mcp/serverLifecycleMcp.test.ts b/tests/boundary/mcp/serverLifecycleMcp.test.ts index ddd10652dc..74a6697ab2 100644 --- a/tests/boundary/mcp/serverLifecycleMcp.test.ts +++ b/tests/boundary/mcp/serverLifecycleMcp.test.ts @@ -116,18 +116,7 @@ it("handles concurrent tool calls without corruption", async () => { execute: (name) => { invocations.push(name); return Promise.resolve( - ok( - ["list_procedures", "list_strings"].includes(name) - ? { - items: [], - offset: 0, - limit: 100, - total: 0, - next_offset: null, - has_more: false, - } - : [], - ), + ok(["list_procedures", "list_strings"].includes(name) ? [] : []), ); }, }); diff --git a/tests/boundary/mcp/serverUnknownsMcp.test.ts b/tests/boundary/mcp/serverUnknownsMcp.test.ts index 03711c3f6b..0addc58309 100644 --- a/tests/boundary/mcp/serverUnknownsMcp.test.ts +++ b/tests/boundary/mcp/serverUnknownsMcp.test.ts @@ -35,8 +35,6 @@ const providerWithCapabilities = ( (operation) => ({ provider: identity, operation, - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", @@ -77,69 +75,6 @@ const structured = (result: CallToolResult): Record => { return Object.fromEntries(Object.entries(result.structuredContent)); }; -it("records approved trace truncation as a deduplicated residual unknown", async () => { - const analysis: AnalysisOperationPort = { - execute: () => - Promise.resolve( - ok({ - items: [], - offset: 0, - limit: 500, - total: 0, - next_offset: null, - has_more: false, - }), - ), - }; - const session = createTestBinarySession( - providerWithCapabilities([ - "list_strings", - "list_procedures", - "xrefs", - "resolve_containing_procedure", - ]), - ); - const server = createServer(analysis, session); - const client = new Client({ name: "unknown-workflow", version: "1.0.0" }); - const [clientTransport, serverTransport] = - InMemoryTransport.createLinkedPair(); - resources.push(client, server); - await server.connect(serverTransport); - await client.connect(clientTransport); - await client.callTool({ - name: "open_binary", - arguments: { path: process.execPath }, - }); - - for (let attempt = 0; attempt < 2; attempt += 1) { - const traced = await client.callTool({ - name: "trace_feature", - arguments: { - query: "license", - max_operations: 1, - unknown_registry_approved: true, - }, - }); - expect(traced.isError).not.toBe(true); - } - const listed = structured( - await client.callTool({ name: "list_unknowns", arguments: {} }), - ); - expect(listed).toMatchObject({ - result: { - items: [ - { - unknown: { - status: "open", - domain: "control-flow", - question: "Investigation reached the operation budget.", - }, - }, - ], - }, - }); -}, 10_000); - it("records approved typed capability unavailability without forwarding the flag", async () => { const received: Array>> = []; const analysis: AnalysisOperationPort = { @@ -191,17 +126,15 @@ it("records approved typed capability unavailability without forwarding the flag result: { items: [ { - unknown: { - domain: "analysis-capability", - question: - "The requested analysis is unavailable for the current target.", - recommended_probes: [ - { - rationale: - "Choose another analysis or target that can answer this question.", - }, - ], - }, + domain: "analysis-capability", + question: + "The requested analysis is unavailable for the current target.", + recommended_probes: [ + { + rationale: + "Choose another analysis or target that can answer this question.", + }, + ], }, ], }, @@ -243,7 +176,7 @@ it("records approved capture disagreement as a contradicted unknown", async () = }); const captureEvidence = (capture: typeof left) => createEvidence(undefined, PROCESS_PROVIDER, { - predicateType: "rea.process-capture/v4", + predicateType: "rea.process-capture", operation: "capture_process_scenario", parameters: {}, result: jsonValueSchema.parse(capture), @@ -291,12 +224,10 @@ it("records approved capture disagreement as a contradicted unknown", async () = result: { items: [ { - unknown: { - status: "contradicted", - domain: "process-comparison", - question: "Process captures disagree across: interaction, shim", - contradicting_evidence_ids: [rightEvidence.evidence_id], - }, + status: "contradicted", + domain: "process-comparison", + question: "Process captures disagree across: interaction, shim", + contradicting_evidence_ids: [rightEvidence.evidence_id], }, ], }, diff --git a/tests/boundary/mcp/serverWorkflowMcp.test.ts b/tests/boundary/mcp/serverWorkflowMcp.test.ts index 0079ee2b5c..5a1fda416f 100644 --- a/tests/boundary/mcp/serverWorkflowMcp.test.ts +++ b/tests/boundary/mcp/serverWorkflowMcp.test.ts @@ -49,17 +49,10 @@ it("executes a realistic workflow: list methods, decompile selected, get xrefs", switch (name) { case "list_procedures": return Promise.resolve( - ok({ - items: [ - { address: "0x1000", value: "main" }, - { address: "0x2000", value: "helper" }, - ], - offset: 0, - limit: 100, - total: 2, - next_offset: null, - has_more: false, - }), + ok([ + { address: "0x1000", value: "main" }, + { address: "0x2000", value: "helper" }, + ]), ); case "procedure_pseudo_code": return Promise.resolve( @@ -79,14 +72,10 @@ it("executes a realistic workflow: list methods, decompile selected, get xrefs", }); expect(listResult.isError).not.toBe(true); expect(structured(listResult)).toMatchObject({ - result: { - items: [ - { address: "0x1000", value: "main" }, - { address: "0x2000", value: "helper" }, - ], - total: 2, - has_more: false, - }, + result: [ + { address: "0x1000", value: "main" }, + { address: "0x2000", value: "helper" }, + ], }); const decompileResult = await client.callTool({ @@ -138,7 +127,7 @@ it("advertises the complete currently available inventory with a session", async const status = structured( await client.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }), ); const available = new Set( diff --git a/tests/boundary/mcp/sessionMcp.test.ts b/tests/boundary/mcp/sessionMcp.test.ts index 9b9eba77f4..f9f1d917b1 100644 --- a/tests/boundary/mcp/sessionMcp.test.ts +++ b/tests/boundary/mcp/sessionMcp.test.ts @@ -27,7 +27,6 @@ import { const SNAPSHOT_PROFILE = createAnalysisProfile( { id: "fixture", name: "Fixture analysis provider", version: "1" }, - 1, { fixture: true }, ); @@ -93,7 +92,7 @@ describe("target-free MCP lifecycle", () => { structured( await mcp.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }), ), ).result, @@ -117,7 +116,7 @@ describe("target-free MCP workflow", () => { const beforeTools = (await mcp.listTools()).tools; const beforeNames = beforeTools.map(({ name }) => name); expect(mcp.getInstructions()).toContain( - "archive/package -> open_binary(path), then inspect_artifact/inventory_artifact (active target)", + "archive/package -> open_binary(path), then inspect_artifact/inventory_artifact", ); expect( beforeTools.find(({ name }) => name === "inventory_artifact") @@ -137,15 +136,17 @@ describe("target-free MCP workflow", () => { structured( await mcp.callTool({ name: "binary_session", - arguments: { detail: "full" }, + arguments: {}, }), ), ).toMatchObject({ result: { path: await realpath(first) } }); expect( text(await mcp.callTool({ name: "current_document", arguments: {} })), ).toContain("first.hop"); - const { recordedUnknown, changesBeforeMutation } = - await snapshotAndRecordUnknown(lifecycle, directory); + const { recordedUnknown } = await snapshotAndRecordUnknown( + lifecycle, + directory, + ); const resolved = await mcp.callTool({ name: "update_unknown", arguments: { @@ -170,8 +171,6 @@ describe("target-free MCP workflow", () => { }); expect(resolved.isError).not.toBe(true); await new Promise((resolve) => setImmediate(resolve)); - expect(lifecycle.unknownResourceUpdates()).toBe(1); - expect(lifecycle.resourceListChanges()).toBe(changesBeforeMutation); expect( structured( await mcp.callTool({ @@ -267,21 +266,19 @@ describe("process residuals over MCP", () => { result: z.object({ items: z.array( z.object({ - unknown: z.object({ - question: z.string(), - domain: z.string(), - }), + question: z.string(), + domain: z.string(), }), ), }), }) .parse(structured(listedUnknowns)).result.items; - expect(listed).toContainEqual({ - unknown: expect.objectContaining({ + expect(listed).toContainEqual( + expect.objectContaining({ question: "Was network behavior fully observed during capture?", domain: "process-network", }), - }); + ); }); }); @@ -301,8 +298,6 @@ const provider = (closed: string[]): AnalysisProvider => { const capability: CapabilityDescriptor = { provider: identity, operation: "current_document", - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", @@ -341,6 +336,8 @@ const structured = (result: CallToolResult): Record => { typeof result.structuredContent !== "object" || result.structuredContent === null ) - throw new Error("missing structured result"); + throw new Error( + `missing structured result: ${JSON.stringify(result.content)}`, + ); return z.record(z.string(), z.unknown()).parse(result.structuredContent); }; diff --git a/tests/boundary/mcp/sessionMcpHarness.ts b/tests/boundary/mcp/sessionMcpHarness.ts index e631115761..8a67252857 100644 --- a/tests/boundary/mcp/sessionMcpHarness.ts +++ b/tests/boundary/mcp/sessionMcpHarness.ts @@ -1,4 +1,4 @@ -import { writeFile } from "node:fs/promises"; +import { readFile, writeFile } from "node:fs/promises"; import { join } from "node:path"; import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; @@ -20,7 +20,6 @@ import type { AnalysisProvider } from "../../../src/application/AnalysisProvider const SNAPSHOT_PROFILE = createAnalysisProfile( { id: "fixture", name: "Fixture analysis provider", version: "1" }, - 1, { fixture: true }, ); @@ -29,8 +28,6 @@ export interface SessionMcpHarness { readonly first: string; readonly second: string; readonly closed: string[]; - readonly resourceListChanges: () => number; - readonly unknownResourceUpdates: () => number; } export const createSessionMcpHarness = async ( @@ -59,14 +56,6 @@ export const createSessionMcpHarness = async ( analysisSnapshotFilePolicy: filePolicy, }); const mcp = new Client({ name: "session-test", version: "1.0.0" }); - let resourceChanges = 0; - let unknownUpdates = 0; - mcp.setNotificationHandler("notifications/resources/list_changed", () => { - resourceChanges += 1; - }); - mcp.setNotificationHandler("notifications/resources/updated", (notice) => { - if (notice.params.uri.startsWith("rea://unknown/")) unknownUpdates += 1; - }); const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair(); resources.push(mcp, server); @@ -77,8 +66,6 @@ export const createSessionMcpHarness = async ( first, second, closed, - resourceListChanges: () => resourceChanges, - unknownResourceUpdates: () => unknownUpdates, }; }; @@ -87,34 +74,27 @@ export const snapshotAndRecordUnknown = async ( root: string, ): Promise<{ recordedUnknown: { unknown_id: string; revision: number }; - changesBeforeMutation: number; }> => { const { mcp } = harness; const snapshotted = await mcp.callTool({ - name: "snapshot_evidence_bundle", + name: "get_evidence_bundle", arguments: {}, }); - const snapshotResult = z - .object({ result: z.object({ bundle_uri: z.string() }) }) - .parse(structured(snapshotted)).result; - const bundleResource = await mcp.readResource({ - uri: snapshotResult.bundle_uri, + expect(structured(snapshotted).result).toMatchObject({ + records: expect.any(Array), + unknowns: expect.any(Array), }); + const evidencePath = join(root, "evidence.json"); + structured( + await mcp.callTool({ + name: "export_evidence_bundle", + arguments: { path: evidencePath }, + }), + ); const bundle = evidenceBundleSchema.parse( - JSON.parse( - z.object({ text: z.string() }).parse(bundleResource.contents[0]).text, - ), + JSON.parse(await readFile(evidencePath, "utf8")), ); expect(bundle.records).toHaveLength(1); - const evidencePath = join(root, "evidence.json"); - expect( - structured( - await mcp.callTool({ - name: "export_evidence_bundle", - arguments: { path: evidencePath }, - }), - ).result, - ).toMatchObject({ path: evidencePath, records: 1 }); expect( structured( await mcp.callTool({ @@ -144,9 +124,6 @@ export const snapshotAndRecordUnknown = async ( }), ).result, ).toEqual({ imported: 1, unknowns_added: 0, total: 2 }); - await new Promise((resolve) => setImmediate(resolve)); - expect(harness.resourceListChanges()).toBe(0); - const changesBeforeMutation = harness.resourceListChanges(); const recordedUnknown = z .object({ result: z.object({ unknown_id: z.string(), revision: z.number() }), @@ -170,8 +147,6 @@ export const snapshotAndRecordUnknown = async ( ), ).result; expect(recordedUnknown.revision).toBe(1); - await new Promise((resolve) => setImmediate(resolve)); - expect(harness.resourceListChanges()).toBe(changesBeforeMutation); const listedUnknowns = await mcp.callTool({ name: "list_unknowns", arguments: {}, @@ -182,7 +157,7 @@ export const snapshotAndRecordUnknown = async ( .object({ result: z.object({ items: z.array(z.unknown()) }) }) .parse(structured(listedUnknowns)).result.items, ).toHaveLength(1); - return { recordedUnknown, changesBeforeMutation }; + return { recordedUnknown }; }; const structured = (result: CallToolResult): Record => { diff --git a/tests/boundary/mcp/toolRegistrationOptions.test.ts b/tests/boundary/mcp/toolRegistrationOptions.test.ts index 17dbc45499..bb86331455 100644 --- a/tests/boundary/mcp/toolRegistrationOptions.test.ts +++ b/tests/boundary/mcp/toolRegistrationOptions.test.ts @@ -58,16 +58,8 @@ describe("tool registration options", () => { const analyzeFunction = advertised.find( ({ name }) => name === "analyze_function", ); - expect(analyzeFunction?.inputSchema.properties).toMatchObject({ - include_assembly: { - description: "Whether to include assembly in the result.", - }, - max_instructions: { - description: "Maximum permitted instructions for this operation.", - }, - pseudocode_offset: { - description: "Zero-based index of the first pseudocode to return.", - }, + expect(analyzeFunction?.inputSchema.properties).toEqual({ + procedure: expect.objectContaining({ type: "string" }), }); expect(advertised).toEqual( GENERATED_MCP_TOOL_CATALOG.map((tool) => ({ diff --git a/tests/boundary/mcp/toolResult.test.ts b/tests/boundary/mcp/toolResult.test.ts index 1b2d39ff68..f918f71616 100644 --- a/tests/boundary/mcp/toolResult.test.ts +++ b/tests/boundary/mcp/toolResult.test.ts @@ -42,7 +42,7 @@ describe("tool result projection", () => { error: { code: "provider_unavailable", details: { failure_code: "unsupported_demo_dialog" }, - category: "execution_failure", + category: "unavailable", }, }); expect(JSON.stringify(result)).not.toContain("expected Hopper"); @@ -87,7 +87,7 @@ describe("tool result projection", () => { }); expect(JSON.stringify(result)).not.toContain("cookie"); }); - it("links successful evidence only when its session resource exists", () => { + it("returns result and complete Evidence context in one call", () => { const evidence = createEvidence( undefined, { id: "fixture", name: "Fixture", version: "1" }, @@ -95,7 +95,6 @@ describe("tool result projection", () => { operation: "fixture", parameters: {}, result: { value: "observed" }, - limitations: [], }, ); const evidenceContract: ToolContract = { @@ -103,22 +102,27 @@ describe("tool result projection", () => { outputSchema: evidenceResultOf(z.object({ value: z.string() })), }; - expect( - toCallToolResult(ok(evidence), evidenceContract).content, - ).not.toEqual( - expect.arrayContaining([ - expect.objectContaining({ type: "resource_link" }), - ]), - ); - expect( - toCallToolResult(ok(evidence), evidenceContract, { - evidenceResourcesAvailable: true, - }).content, - ).toContainEqual( - expect.objectContaining({ - type: "resource_link", - uri: `rea://evidence/${evidence.evidence_id}`, - }), - ); + const result = toCallToolResult(ok(evidence), evidenceContract); + expect(result.structuredContent).toMatchObject({ + result: { value: "observed" }, + evidence_id: evidence.evidence_id, + evidence: { + provider: { id: "fixture", name: "Fixture", version: "1" }, + operation: "fixture", + predicate_type: "rea.analysis/v2", + parameters: {}, + raw_result: null, + confidence: "observed", + authority: "shipped-artifact", + environment: null, + limitations: evidence.limitations, + locations: [], + evidence_links: [], + }, + }); + expect(result.content[0]).toMatchObject({ + type: "text", + text: expect.stringContaining('"value":"observed"'), + }); }); }); diff --git a/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts b/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts index 571bba4424..93f456402e 100644 --- a/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts +++ b/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts @@ -12,7 +12,6 @@ import { analyzeJavaScriptApplication } from "../../../src/application/JavaScrip import { reconcileJavaScriptRuntime } from "../../../src/domain/javascriptRuntimeReconciliation.js"; import { inspectElectronPageInputSchema } from "../../../src/domain/electronObservation.js"; import { createWebTextArtifact } from "../../../src/domain/webContentArtifact.js"; -import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; const SOURCE = `const worker = new Worker("./worker.js");\nexport const observed = worker;\n`; const execute = promisify(execFile); @@ -206,14 +205,8 @@ const applicationFixture = async (): Promise => { }; const analyzeFixture = async (root: string) => { - const authority = await permissionAuthorityForRoot( - root, - ["investigation_input"], - ["investigation_input"], - ); - const result = await analyzeJavaScriptApplication(authority, { + const result = await analyzeJavaScriptApplication({ input_path: root, - approved: true, }); if (!result.ok) throw result.error; return result.value; @@ -256,7 +249,6 @@ const electronRuntimeEvidence = ( "inspect_electron_page", input, { - schema_version: 1, browser: { product: "Electron/fixture", protocol_version: "1.3", diff --git a/tests/boundary/process/processCaptureTerminal.test.ts b/tests/boundary/process/processCaptureTerminal.test.ts index 9c8a4bedb7..748dba80a5 100644 --- a/tests/boundary/process/processCaptureTerminal.test.ts +++ b/tests/boundary/process/processCaptureTerminal.test.ts @@ -141,7 +141,6 @@ it("renders terminal state, records shim invocations, and captures literal check ); expect(result.ok).toBe(true); if (!result.ok) throw result.error; - expect(result.value.schema_version).toBe(4); expect(result.value.rendered_frames.at(-1)?.lines.join("\n")).toContain( "probe:codex 1.2.3", ); diff --git a/tests/boundary/providers/ghidra/ghidraBridgeTruthfulness.test.ts b/tests/boundary/providers/ghidra/ghidraBridgeTruthfulness.test.ts deleted file mode 100644 index 6f13141e49..0000000000 --- a/tests/boundary/providers/ghidra/ghidraBridgeTruthfulness.test.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { readFile } from "node:fs/promises"; -import { fileURLToPath } from "node:url"; - -import { beforeAll, describe, expect, it } from "vitest"; - -let bridgeSource = ""; - -beforeAll(async () => { - bridgeSource = await readFile( - fileURLToPath( - new URL( - "../../../../bridge/ghidra/ReaGhidraBridge.java", - import.meta.url, - ), - ), - "utf8", - ); -}); - -describe("Ghidra bridge truthfulness", () => { - it("owns one persistent decompiler interface for the Program lifetime", () => { - expect(bridgeSource).toContain("private DecompInterface decompiler;"); - expect(bridgeSource.match(/new DecompInterface\(\)/gu)).toHaveLength(1); - expect( - bridgeSource.match(/decompiler\.openProgram\(currentProgram\)/gu), - ).toHaveLength(1); - expect(bridgeSource).toContain("decompiler.dispose()"); - expect(bridgeSource).toContain("DECOMPILE_TIMEOUT_SECONDS = 30"); - expect(bridgeSource).toContain( - "decompileFunction(\n function,\n DECOMPILE_TIMEOUT_SECONDS", - ); - }); - - it("projects references and CFG from public Ghidra models", () => { - expect(bridgeSource).toContain("getReferenceManager().getReferencesTo"); - expect(bridgeSource).toContain( - "getReferencesFrom(instruction.getAddress())", - ); - expect(bridgeSource).toContain( - "new BasicBlockModel(currentProgram, false)", - ); - expect(bridgeSource).toContain("block.getDestinations(monitor)"); - expect(bridgeSource).toContain( - 'result.addProperty("computed", type.isComputed())', - ); - expect(bridgeSource).toContain( - 'result.addProperty("indirect", type.isIndirect())', - ); - expect(bridgeSource).toContain( - 'result.addProperty("external", reference.isExternalReference())', - ); - expect(bridgeSource).toContain("reference.isEntryPointReference()"); - }); - - it("keeps function classification and targetless-flow uncertainty explicit", () => { - expect(bridgeSource).toContain("function.isThunk()"); - expect(bridgeSource).toContain("function.isExternal()"); - expect(bridgeSource).toContain('"ghidra-function-manager"'); - expect(bridgeSource).toContain( - "Unresolved computed or indirect flows without target addresses", - ); - expect(bridgeSource).toContain( - "not original source or Hopper-equivalent text", - ); - }); - - it("binds the Windows fallback to authenticated IPv4 loopback", () => { - expect(bridgeSource).toContain( - 'descriptor.transport.equals("unix-socket")', - ); - expect(bridgeSource).toContain( - 'descriptor.transport.equals("authenticated-loopback-tcp")', - ); - expect(bridgeSource).toContain('InetAddress.getByName("127.0.0.1")'); - expect(bridgeSource).toContain('endpoint.addProperty("host", "127.0.0.1")'); - expect(bridgeSource).toContain("StandardCopyOption.ATOMIC_MOVE"); - }); - - it("does not admit mutation methods into the Java dispatch", () => { - for (const method of [ - 'case "set_comment"', - 'case "set_address_name"', - 'case "set_inline_comment"', - 'case "set_bookmark"', - ]) - expect(bridgeSource).not.toContain(method); - }); -}); diff --git a/tests/boundary/providers/ghidra/ghidraClient.test.ts b/tests/boundary/providers/ghidra/ghidraClient.test.ts index ddcb86a868..be801240eb 100644 --- a/tests/boundary/providers/ghidra/ghidraClient.test.ts +++ b/tests/boundary/providers/ghidra/ghidraClient.test.ts @@ -169,22 +169,16 @@ describe("GhidraClient", () => { await expect( client.callTool("list_procedures", { document: null, - offset: 0, - limit: 500, }), ).resolves.toMatchObject({ ok: true, - value: { - items: [ - { - address: "0x1000", - value: "fixture_main", - procedure: { external: false, thunk: false }, - }, - ], - total: 1, - has_more: false, - }, + value: [ + { + address: "0x1000", + value: "fixture_main", + procedure: { external: false, thunk: false }, + }, + ], }); }); @@ -348,33 +342,6 @@ describe("GhidraClient established requests", () => { activeController.abort(); await active; }); - - it("bounds the serial per-Program request queue", async () => { - const client = clientFor(new FixtureLauncher("hang_tools"), { - requestTimeoutMs: 10_000, - }); - await expect(client.start()).resolves.toMatchObject({ ok: true }); - const controller = new AbortController(); - const requests = Array.from({ length: 33 }, () => - client.callTool( - "procedure_pseudo_code", - { document: null, procedure: "fixture_main" }, - { signal: controller.signal }, - ), - ); - const overflow = requests[32]; - if (overflow === undefined) throw new Error("Queue probe was not created"); - - await expect(overflow).resolves.toMatchObject({ - ok: false, - error: { - kind: "protocol", - message: expect.stringContaining("32-request limit"), - }, - }); - controller.abort(); - await Promise.all(requests.slice(0, 32)); - }); }); describe("GhidraClient cleanup and diagnostics", () => { diff --git a/tests/boundary/providers/hopper/bridgeRegex.matching.test.ts b/tests/boundary/providers/hopper/bridgeRegex.matching.test.ts deleted file mode 100644 index 57e734e9ab..0000000000 --- a/tests/boundary/providers/hopper/bridgeRegex.matching.test.ts +++ /dev/null @@ -1,390 +0,0 @@ -import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process"; -import { fileURLToPath } from "node:url"; - -import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { z } from "zod"; - -const bridgePath = fileURLToPath( - new URL("../../../../bridge/hopper_bridge.py", import.meta.url), -); -const probePath = fileURLToPath( - new URL("../../../fixtures/bridgeRegexProbe.py", import.meta.url), -); - -const errorResultSchema = z.object({ - action: z.enum(["match", "search"]), - ok: z.literal(false), - type: z.string(), - diagnostic_type: z.string(), - message: z.string(), -}); -const matchResultSchema = z.object({ - action: z.literal("match"), - ok: z.literal(true), - backtracking_paths: z.number().int().positive(), - matched: z.boolean(), -}); -const searchResultSchema = z.object({ - action: z.literal("search"), - ok: z.literal(true), - result: z.object({ - items: z.array( - z.object({ - address: z.string(), - value: z.string(), - value_truncated: z.boolean(), - }), - ), - offset: z.number().int().nonnegative(), - limit: z.number().int().positive(), - total: z.number().int().nonnegative(), - next_offset: z.number().int().nonnegative().nullable(), - has_more: z.boolean(), - }), -}); -const probeResultSchema = z.union([ - errorResultSchema, - matchResultSchema, - searchResultSchema, -]); -type ProbeResult = z.infer; - -type ProbeInput = - | { - readonly action: "match"; - readonly pattern: string; - readonly value: string; - readonly case_sensitive?: boolean; - } - | { - readonly action: "search"; - readonly items: readonly (readonly [string, string])[]; - readonly params: Readonly>; - }; - -interface PendingProbe { - readonly resolve: (result: ProbeResult) => void; - readonly reject: (error: Error) => void; - timeout: NodeJS.Timeout | undefined; -} - -const PROBE_TIMEOUT_MS = 3_000; -const PROBE_BUFFER_LIMIT = 1_024 * 1_024; -const pendingProbes: PendingProbe[] = []; -let probeProcess: ChildProcessWithoutNullStreams | undefined; -let probeStdout = ""; -let probeStderr = ""; -let probeFailure: Error | undefined; -let stoppingProbe = false; - -const failureWithStderr = (message: string): Error => { - const stderr = probeStderr.trim(); - return new Error(stderr.length === 0 ? message : `${message}: ${stderr}`); -}; - -const rejectPendingProbes = (error: Error): void => { - for (const pending of pendingProbes.splice(0)) { - if (pending.timeout !== undefined) clearTimeout(pending.timeout); - pending.reject(error); - } -}; - -const failProbeProcess = (error: Error): void => { - probeFailure ??= error; - rejectPendingProbes(probeFailure); - if ( - !stoppingProbe && - probeProcess?.exitCode === null && - probeProcess.signalCode === null - ) - probeProcess.kill("SIGKILL"); -}; - -const acceptProbeLine = (line: string): void => { - const pending = pendingProbes.shift(); - if (pending === undefined) { - failProbeProcess( - failureWithStderr("Python probe returned an extra result"), - ); - return; - } - if (pending.timeout !== undefined) clearTimeout(pending.timeout); - try { - const decoded: unknown = JSON.parse(line); - pending.resolve(probeResultSchema.parse(decoded)); - } catch (cause: unknown) { - const error = - cause instanceof Error - ? cause - : failureWithStderr("Python probe returned an invalid result"); - pending.reject(error); - failProbeProcess(error); - } -}; - -const acceptProbeOutput = (chunk: string): void => { - probeStdout += chunk; - if (Buffer.byteLength(probeStdout) > PROBE_BUFFER_LIMIT) { - failProbeProcess(failureWithStderr("Python probe output exceeded 1 MiB")); - return; - } - let newline = probeStdout.indexOf("\n"); - while (newline >= 0) { - const line = probeStdout.slice(0, newline).replace(/\r$/u, ""); - probeStdout = probeStdout.slice(newline + 1); - acceptProbeLine(line); - newline = probeStdout.indexOf("\n"); - } -}; - -const startProbeProcess = async (): Promise => { - stoppingProbe = false; - probeFailure = undefined; - probeStdout = ""; - probeStderr = ""; - const child = spawn("python3", [probePath, bridgePath], { - stdio: ["pipe", "pipe", "pipe"], - }); - probeProcess = child; - child.stdout.setEncoding("utf8"); - child.stderr.setEncoding("utf8"); - child.stdout.on("data", acceptProbeOutput); - child.stderr.on("data", (chunk: string) => { - probeStderr += chunk; - if (Buffer.byteLength(probeStderr) > PROBE_BUFFER_LIMIT) - failProbeProcess(new Error("Python probe stderr exceeded 1 MiB")); - }); - child.stdin.on("error", (error) => { - if (!stoppingProbe) failProbeProcess(error); - }); - child.on("error", (error) => { - if (!stoppingProbe) failProbeProcess(error); - }); - child.on("exit", (code, signal) => { - if (!stoppingProbe) - failProbeProcess( - failureWithStderr( - `Python probe exited before responding (code ${String(code)}, signal ${String(signal)})`, - ), - ); - }); - await new Promise((resolve, reject) => { - const onSpawn = (): void => { - child.off("error", onError); - resolve(); - }; - const onError = (error: Error): void => { - child.off("spawn", onSpawn); - reject(error); - }; - child.once("spawn", onSpawn); - child.once("error", onError); - }); -}; - -const hasExited = (child: ChildProcessWithoutNullStreams): boolean => - child.exitCode !== null || child.signalCode !== null; - -const waitForExit = ( - child: ChildProcessWithoutNullStreams, - timeoutMs: number, -): Promise => { - if (hasExited(child)) return Promise.resolve(true); - return new Promise((resolve) => { - const onExit = (): void => { - clearTimeout(timeout); - resolve(true); - }; - const timeout = setTimeout(() => { - child.off("exit", onExit); - resolve(false); - }, timeoutMs); - child.once("exit", onExit); - }); -}; - -const stopProbeProcess = async (): Promise => { - const child = probeProcess; - if (child === undefined) return; - stoppingProbe = true; - rejectPendingProbes(new Error("Python probe stopped before responding")); - if (!hasExited(child)) child.stdin.end(); - if (!(await waitForExit(child, 500))) child.kill("SIGTERM"); - if (!(await waitForExit(child, 500))) child.kill("SIGKILL"); - if (!(await waitForExit(child, 500))) - throw new Error("Python probe did not stop after SIGKILL"); - probeProcess = undefined; -}; - -const probe = (input: ProbeInput): Promise => { - const child = probeProcess; - if (probeFailure !== undefined) return Promise.reject(probeFailure); - if (child === undefined || hasExited(child)) - return Promise.reject(new Error("Python probe is not running")); - return new Promise((resolve, reject) => { - const pending: PendingProbe = { resolve, reject, timeout: undefined }; - pending.timeout = setTimeout(() => { - failProbeProcess( - new Error( - `Python probe request timed out after ${String(PROBE_TIMEOUT_MS)} ms`, - ), - ); - }, PROBE_TIMEOUT_MS); - pendingProbes.push(pending); - child.stdin.write(`${JSON.stringify(input)}\n`, (error) => { - if (error !== null && error !== undefined) failProbeProcess(error); - }); - }); -}; - -beforeAll(startProbeProcess); -beforeEach(async () => { - if ( - probeFailure === undefined && - probeProcess !== undefined && - !hasExited(probeProcess) - ) - return; - await stopProbeProcess(); - await startProbeProcess(); -}); -afterAll(stopProbeProcess); - -const invalidRequest = (action: "match" | "search", message: string) => ({ - action, - ok: false, - type: "ValueError", - diagnostic_type: "invalid_request", - message, -}); - -describe("Hopper bridge regex matching", () => { - it("accepts useful patterns whose static backtracking budget is bounded", async () => { - await expect( - probe({ - action: "match", - pattern: String.raw`^rea_(?:main|helper)_[0-9]{1,3}$`, - value: "REA_helper_42", - }), - ).resolves.toEqual({ - action: "match", - ok: true, - backtracking_paths: 6, - matched: true, - }); - }); - - it("applies bounded regex matching through deterministic pagination", async () => { - await expect( - probe({ - action: "search", - items: [ - ["0x1000", "REA_main_1"], - ["0x2000", "unrelated"], - ["0x3000", "rea_helper_42"], - ], - params: { - pattern: String.raw`^rea_(?:main|helper)_[0-9]{1,3}$`, - mode: "regex", - case_sensitive: false, - offset: 1, - limit: 1, - }, - }), - ).resolves.toEqual({ - action: "search", - ok: true, - result: { - items: [ - { - address: "0x3000", - value: "rea_helper_42", - value_truncated: false, - }, - ], - offset: 1, - limit: 1, - total: 2, - next_offset: null, - has_more: false, - }, - }); - }); - - it.each([ - [ - "lookaround", - "(?=a)a", - "Regex lookarounds and backreferences are not supported", - ], - [ - "backreference", - String.raw`(a)\1`, - "Regex lookarounds and backreferences are not supported", - ], - [ - "nested repeat", - "(a{1,2}){1,2}", - "Nested regex repetitions are not supported", - ], - [ - "unbounded repeat", - "a+", - "Unbounded or excessive regex repetitions are not supported", - ], - [ - "excessive repeat", - "a{1001}", - "Unbounded or excessive regex repetitions are not supported", - ], - ])("rejects unsupported %s constructs", async (_name, pattern, message) => { - await expect( - probe({ action: "match", pattern, value: "aaaa", case_sensitive: true }), - ).resolves.toEqual(invalidRequest("match", message)); - }); - - it.each(["(", "a{999999999999999999999999}"])( - "normalizes parser failure %s through the search boundary", - async (pattern) => { - await expect( - probe({ - action: "search", - items: [], - params: { pattern, mode: "regex", offset: 0, limit: 1 }, - }), - ).resolves.toEqual(invalidRequest("search", "Invalid regex pattern")); - }, - ); - - it("accepts the maximum bounded repeat at the exact work budget", async () => { - await expect( - probe({ - action: "match", - pattern: "a{1000}", - value: "a".repeat(1_000), - case_sensitive: true, - }), - ).resolves.toEqual({ - action: "match", - ok: true, - backtracking_paths: 1, - matched: true, - }); - }); - - it("accepts expensive matching just below the cumulative work limit", async () => { - await expect( - probe({ - action: "match", - pattern: "(?:a|aa){1,8}b", - value: "a".repeat(115), - case_sensitive: true, - }), - ).resolves.toEqual({ - action: "match", - ok: true, - backtracking_paths: 510, - matched: false, - }); - }); -}); diff --git a/tests/boundary/providers/hopper/bridgeRegex.workLimits.test.ts b/tests/boundary/providers/hopper/bridgeRegex.workLimits.test.ts deleted file mode 100644 index 349c00f6b0..0000000000 --- a/tests/boundary/providers/hopper/bridgeRegex.workLimits.test.ts +++ /dev/null @@ -1,396 +0,0 @@ -import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process"; -import { fileURLToPath } from "node:url"; - -import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { z } from "zod"; - -const bridgePath = fileURLToPath( - new URL("../../../../bridge/hopper_bridge.py", import.meta.url), -); -const probePath = fileURLToPath( - new URL("../../../fixtures/bridgeRegexProbe.py", import.meta.url), -); - -const errorResultSchema = z.object({ - action: z.enum(["match", "search"]), - ok: z.literal(false), - type: z.string(), - diagnostic_type: z.string(), - message: z.string(), -}); -const matchResultSchema = z.object({ - action: z.literal("match"), - ok: z.literal(true), - backtracking_paths: z.number().int().positive(), - matched: z.boolean(), -}); -const searchResultSchema = z.object({ - action: z.literal("search"), - ok: z.literal(true), - result: z.object({ - items: z.array( - z.object({ - address: z.string(), - value: z.string(), - value_truncated: z.boolean(), - }), - ), - offset: z.number().int().nonnegative(), - limit: z.number().int().positive(), - total: z.number().int().nonnegative(), - next_offset: z.number().int().nonnegative().nullable(), - has_more: z.boolean(), - }), -}); -const probeResultSchema = z.union([ - errorResultSchema, - matchResultSchema, - searchResultSchema, -]); -type ProbeResult = z.infer; - -type ProbeInput = - | { - readonly action: "match"; - readonly pattern: string; - readonly value: string; - readonly case_sensitive?: boolean; - } - | { - readonly action: "search"; - readonly items: readonly (readonly [string, string])[]; - readonly params: Readonly>; - }; - -interface PendingProbe { - readonly resolve: (result: ProbeResult) => void; - readonly reject: (error: Error) => void; - timeout: NodeJS.Timeout | undefined; -} - -const PROBE_TIMEOUT_MS = 3_000; -const PROBE_BUFFER_LIMIT = 1_024 * 1_024; -const pendingProbes: PendingProbe[] = []; -let probeProcess: ChildProcessWithoutNullStreams | undefined; -let probeStdout = ""; -let probeStderr = ""; -let probeFailure: Error | undefined; -let stoppingProbe = false; - -const failureWithStderr = (message: string): Error => { - const stderr = probeStderr.trim(); - return new Error(stderr.length === 0 ? message : `${message}: ${stderr}`); -}; - -const rejectPendingProbes = (error: Error): void => { - for (const pending of pendingProbes.splice(0)) { - if (pending.timeout !== undefined) clearTimeout(pending.timeout); - pending.reject(error); - } -}; - -const failProbeProcess = (error: Error): void => { - probeFailure ??= error; - rejectPendingProbes(probeFailure); - if ( - !stoppingProbe && - probeProcess?.exitCode === null && - probeProcess.signalCode === null - ) - probeProcess.kill("SIGKILL"); -}; - -const acceptProbeLine = (line: string): void => { - const pending = pendingProbes.shift(); - if (pending === undefined) { - failProbeProcess( - failureWithStderr("Python probe returned an extra result"), - ); - return; - } - if (pending.timeout !== undefined) clearTimeout(pending.timeout); - try { - const decoded: unknown = JSON.parse(line); - pending.resolve(probeResultSchema.parse(decoded)); - } catch (cause: unknown) { - const error = - cause instanceof Error - ? cause - : failureWithStderr("Python probe returned an invalid result"); - pending.reject(error); - failProbeProcess(error); - } -}; - -const acceptProbeOutput = (chunk: string): void => { - probeStdout += chunk; - if (Buffer.byteLength(probeStdout) > PROBE_BUFFER_LIMIT) { - failProbeProcess(failureWithStderr("Python probe output exceeded 1 MiB")); - return; - } - let newline = probeStdout.indexOf("\n"); - while (newline >= 0) { - const line = probeStdout.slice(0, newline).replace(/\r$/u, ""); - probeStdout = probeStdout.slice(newline + 1); - acceptProbeLine(line); - newline = probeStdout.indexOf("\n"); - } -}; - -const startProbeProcess = async (): Promise => { - stoppingProbe = false; - probeFailure = undefined; - probeStdout = ""; - probeStderr = ""; - const child = spawn("python3", [probePath, bridgePath], { - stdio: ["pipe", "pipe", "pipe"], - }); - probeProcess = child; - child.stdout.setEncoding("utf8"); - child.stderr.setEncoding("utf8"); - child.stdout.on("data", acceptProbeOutput); - child.stderr.on("data", (chunk: string) => { - probeStderr += chunk; - if (Buffer.byteLength(probeStderr) > PROBE_BUFFER_LIMIT) - failProbeProcess(new Error("Python probe stderr exceeded 1 MiB")); - }); - child.stdin.on("error", (error) => { - if (!stoppingProbe) failProbeProcess(error); - }); - child.on("error", (error) => { - if (!stoppingProbe) failProbeProcess(error); - }); - child.on("exit", (code, signal) => { - if (!stoppingProbe) - failProbeProcess( - failureWithStderr( - `Python probe exited before responding (code ${String(code)}, signal ${String(signal)})`, - ), - ); - }); - await new Promise((resolve, reject) => { - const onSpawn = (): void => { - child.off("error", onError); - resolve(); - }; - const onError = (error: Error): void => { - child.off("spawn", onSpawn); - reject(error); - }; - child.once("spawn", onSpawn); - child.once("error", onError); - }); -}; - -const hasExited = (child: ChildProcessWithoutNullStreams): boolean => - child.exitCode !== null || child.signalCode !== null; - -const waitForExit = ( - child: ChildProcessWithoutNullStreams, - timeoutMs: number, -): Promise => { - if (hasExited(child)) return Promise.resolve(true); - return new Promise((resolve) => { - const onExit = (): void => { - clearTimeout(timeout); - resolve(true); - }; - const timeout = setTimeout(() => { - child.off("exit", onExit); - resolve(false); - }, timeoutMs); - child.once("exit", onExit); - }); -}; - -const stopProbeProcess = async (): Promise => { - const child = probeProcess; - if (child === undefined) return; - stoppingProbe = true; - rejectPendingProbes(new Error("Python probe stopped before responding")); - if (!hasExited(child)) child.stdin.end(); - if (!(await waitForExit(child, 500))) child.kill("SIGTERM"); - if (!(await waitForExit(child, 500))) child.kill("SIGKILL"); - if (!(await waitForExit(child, 500))) - throw new Error("Python probe did not stop after SIGKILL"); - probeProcess = undefined; -}; - -const probe = (input: ProbeInput): Promise => { - const child = probeProcess; - if (probeFailure !== undefined) return Promise.reject(probeFailure); - if (child === undefined || hasExited(child)) - return Promise.reject(new Error("Python probe is not running")); - return new Promise((resolve, reject) => { - const pending: PendingProbe = { resolve, reject, timeout: undefined }; - pending.timeout = setTimeout(() => { - failProbeProcess( - new Error( - `Python probe request timed out after ${String(PROBE_TIMEOUT_MS)} ms`, - ), - ); - }, PROBE_TIMEOUT_MS); - pendingProbes.push(pending); - child.stdin.write(`${JSON.stringify(input)}\n`, (error) => { - if (error !== null && error !== undefined) failProbeProcess(error); - }); - }); -}; - -beforeAll(startProbeProcess); -beforeEach(async () => { - if ( - probeFailure === undefined && - probeProcess !== undefined && - !hasExited(probeProcess) - ) - return; - await stopProbeProcess(); - await startProbeProcess(); -}); -afterAll(stopProbeProcess); - -const invalidRequest = (action: "match" | "search", message: string) => ({ - action, - ok: false, - type: "ValueError", - diagnostic_type: "invalid_request", - message, -}); - -describe("Hopper bridge regex work limits", () => { - it("rejects ambiguous bounded repetition before Python regex execution", async () => { - await expect( - probe({ - action: "match", - pattern: "(a|aa){1,35}b", - value: "a".repeat(35), - case_sensitive: true, - }), - ).resolves.toEqual( - invalidRequest( - "match", - "Regex exceeds the 10000-path backtracking budget", - ), - ); - }); - - it("rejects excessive combinations across adjacent optional atoms", async () => { - await expect( - probe({ - action: "match", - pattern: `${"a?".repeat(14)}b`, - value: "a".repeat(14), - case_sensitive: true, - }), - ).resolves.toEqual( - invalidRequest( - "match", - "Regex exceeds the 10000-path backtracking budget", - ), - ); - }); - - it("bounds cumulative work before evaluating a costly candidate", async () => { - await expect( - probe({ - action: "match", - pattern: "(?:a|aa){1,12}b", - value: "a".repeat(4_096), - case_sensitive: true, - }), - ).resolves.toEqual( - invalidRequest( - "match", - "Regex search exceeds the 1000000-unit work budget", - ), - ); - }); - - it("applies the regex work budget across the full inventory", async () => { - await expect( - probe({ - action: "search", - items: [ - ["0x1000", "a".repeat(60)], - ["0x2000", "a".repeat(60)], - ], - params: { - pattern: "(?:a|aa){1,8}b", - mode: "regex", - case_sensitive: true, - offset: 0, - limit: 1, - }, - }), - ).resolves.toEqual( - invalidRequest( - "search", - "Regex search exceeds the 1000000-unit work budget", - ), - ); - }); - - it("rejects oversized regex candidates instead of matching a prefix", async () => { - await expect( - probe({ - action: "match", - pattern: "needle", - value: `${"x".repeat(4_096)}needle`, - }), - ).resolves.toEqual( - invalidRequest( - "match", - "Regex candidate exceeds the 4096-character safety limit", - ), - ); - }); - - it("accepts a regex candidate at the exact character limit", async () => { - await expect( - probe({ - action: "match", - pattern: "z$", - value: `${"a".repeat(4_095)}z`, - case_sensitive: true, - }), - ).resolves.toEqual({ - action: "match", - ok: true, - backtracking_paths: 1, - matched: true, - }); - }); - - it.each([ - [256, true], - [257, false], - ])("enforces the %i-character pattern boundary", async (length, accepted) => { - const pattern = "a".repeat(length); - const result = await probe({ - action: "search", - items: [["0x1000", pattern]], - params: { - pattern, - mode: "regex", - case_sensitive: true, - offset: 0, - limit: 1, - }, - }); - if (accepted) { - expect(result).toMatchObject({ - action: "search", - ok: true, - result: { total: 1 }, - }); - return; - } - expect(result).toEqual( - invalidRequest( - "search", - "pattern must contain between 1 and 256 characters", - ), - ); - }); -}); diff --git a/tests/boundary/providers/hopper/bridgeRegex.literalBounds.test.ts b/tests/boundary/providers/hopper/bridgeSearch.test.ts similarity index 77% rename from tests/boundary/providers/hopper/bridgeRegex.literalBounds.test.ts rename to tests/boundary/providers/hopper/bridgeSearch.test.ts index e7ec2b0b18..3bebfb425b 100644 --- a/tests/boundary/providers/hopper/bridgeRegex.literalBounds.test.ts +++ b/tests/boundary/providers/hopper/bridgeSearch.test.ts @@ -8,59 +8,22 @@ const bridgePath = fileURLToPath( new URL("../../../../bridge/hopper_bridge.py", import.meta.url), ); const probePath = fileURLToPath( - new URL("../../../fixtures/bridgeRegexProbe.py", import.meta.url), + new URL("../../../fixtures/bridgeSearchProbe.py", import.meta.url), ); -const errorResultSchema = z.object({ - action: z.enum(["match", "search"]), - ok: z.literal(false), - type: z.string(), - diagnostic_type: z.string(), - message: z.string(), -}); -const matchResultSchema = z.object({ - action: z.literal("match"), - ok: z.literal(true), - backtracking_paths: z.number().int().positive(), - matched: z.boolean(), -}); const searchResultSchema = z.object({ action: z.literal("search"), ok: z.literal(true), - result: z.object({ - items: z.array( - z.object({ - address: z.string(), - value: z.string(), - value_truncated: z.boolean(), - }), - ), - offset: z.number().int().nonnegative(), - limit: z.number().int().positive(), - total: z.number().int().nonnegative(), - next_offset: z.number().int().nonnegative().nullable(), - has_more: z.boolean(), - }), + result: z.array(z.object({ address: z.string(), value: z.string() })), }); -const probeResultSchema = z.union([ - errorResultSchema, - matchResultSchema, - searchResultSchema, -]); +const probeResultSchema = searchResultSchema; type ProbeResult = z.infer; -type ProbeInput = - | { - readonly action: "match"; - readonly pattern: string; - readonly value: string; - readonly case_sensitive?: boolean; - } - | { - readonly action: "search"; - readonly items: readonly (readonly [string, string])[]; - readonly params: Readonly>; - }; +type ProbeInput = { + readonly action: "search"; + readonly items: readonly (readonly [string, string])[]; + readonly params: Readonly>; +}; interface PendingProbe { readonly resolve: (result: ProbeResult) => void; @@ -250,29 +213,48 @@ beforeEach(async () => { }); afterAll(stopProbeProcess); -describe("Hopper bridge literal bounds", () => { - it("keeps literal matching exhaustive while bounding returned text", async () => { - const result = await probe({ - action: "search", - items: [["0x1000", `${"x".repeat(4_096)}needle`]], - params: { - pattern: "needle", - mode: "literal", - case_sensitive: true, - offset: 0, - limit: 1, - }, - }); - expect(result).toMatchObject({ +describe("Hopper bridge search", () => { + it("returns matching literal values in deterministic order", async () => { + await expect( + probe({ + action: "search", + items: [ + ["0x1000", "REA_main_1"], + ["0x2000", "unrelated"], + ["0x3000", "rea_helper_42"], + ], + params: { + pattern: "REA", + mode: "literal", + case_sensitive: false, + }, + }), + ).resolves.toEqual({ action: "search", ok: true, - result: { - total: 1, - has_more: false, - items: [{ address: "0x1000", value_truncated: true }], - }, + result: [ + { address: "0x1000", value: "REA_main_1" }, + { address: "0x3000", value: "rea_helper_42" }, + ], + }); + }); + + it("returns the complete value for a long literal match", async () => { + const value = `${"x".repeat(4_096)}needle`; + await expect( + probe({ + action: "search", + items: [["0x1000", value]], + params: { + pattern: "needle", + mode: "literal", + case_sensitive: true, + }, + }), + ).resolves.toMatchObject({ + action: "search", + ok: true, + result: [{ address: "0x1000", value }], }); - if (result.action === "search" && result.ok) - expect(result.result.items[0]?.value).toHaveLength(4_096); }); }); diff --git a/tests/boundary/providers/hopper/bridgeTargetLease.integration.test.ts b/tests/boundary/providers/hopper/bridgeTargetLease.integration.test.ts new file mode 100644 index 0000000000..019947aa5a --- /dev/null +++ b/tests/boundary/providers/hopper/bridgeTargetLease.integration.test.ts @@ -0,0 +1,78 @@ +import { describe, expect, it } from "vitest"; + +import { HopperApplicationLauncher } from "../../../../src/hopper/BridgeLauncher.js"; + +describe("Hopper target leases in the launcher", () => { + it("reports an active target owner without launching another document", async () => { + let leaseChecks = 0; + const launcher = new HopperApplicationLauncher( + { + launcherPath: + "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper", + targetPath: "/target", + targetKind: "executable", + loaderArgs: [], + bridgeScriptPath: "/rea/hopper_bridge.py", + launchMode: "native", + }, + { + platform: "darwin", + acquireTargetLease: async () => { + leaseChecks += 1; + return { + acquired: false, + owner: { runId: "owning-session", processId: 17 }, + }; + }, + }, + ); + + const result = await launcher.launch({ + directory: "/tmp/rea-launch-test", + socketPath: "/tmp/rea-launch-test/bridge.sock", + token: "token", + runId: "new-session", + }); + + expect(leaseChecks).toBe(1); + expect(result).toMatchObject({ + ok: false, + error: { + _tag: "HopperStartError", + ownerRunId: "owning-session", + userMessage: expect.stringContaining("owning-session"), + }, + }); + }); + + it("releases a target lease when bridge setup fails", async () => { + let releases = 0; + const launcher = new HopperApplicationLauncher( + { + launcherPath: "/unused/hopper", + targetPath: "/target", + targetKind: "executable", + loaderArgs: [], + bridgeScriptPath: "/rea/hopper_bridge.py", + launchMode: "native", + }, + { + platform: "darwin", + acquireTargetLease: async () => ({ + acquired: true, + lease: { release: async () => void (releases += 1) }, + }), + }, + ); + + const result = await launcher.launch({ + directory: "/missing/rea-launch-test", + socketPath: "/missing/rea-launch-test/bridge.sock", + token: "token", + runId: "failed-session", + }); + + expect(result.ok).toBe(false); + expect(releases).toBe(1); + }); +}); diff --git a/tests/boundary/providers/hopper/bridgeTruthfulness.test.ts b/tests/boundary/providers/hopper/bridgeTruthfulness.test.ts deleted file mode 100644 index b5a710ca96..0000000000 --- a/tests/boundary/providers/hopper/bridgeTruthfulness.test.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { readFile } from "node:fs/promises"; - -import { describe, expect, it } from "vitest"; - -const bridgeSource = await readFile( - new URL("../../../../bridge/hopper_bridge.py", import.meta.url), - "utf8", -); - -describe("Hopper bridge truthfulness", () => { - it("collects CFG successors from Hopper instead of fabricating empty edges", () => { - expect(bridgeSource).toContain("block.getSuccessorCount()"); - expect(bridgeSource).toContain("block.getSuccessorAddressAtIndex(index)"); - expect(bridgeSource).not.toContain( - "Hopper's public Python API does not expose CFG successor edges", - ); - }); - - it("does not fabricate non-writable and non-executable segment permissions", () => { - expect(bridgeSource).toContain('"writable": None'); - expect(bridgeSource).toContain('"executable": None'); - expect(bridgeSource).toContain('"readable": None'); - expect(bridgeSource).toContain("permission_limitation = _unavailable("); - expect(bridgeSource).toContain('"permissions": permission_limitation'); - expect(bridgeSource).toContain('"provenance": "hopper-public-python-api"'); - expect(bridgeSource).not.toContain('"writable": False'); - expect(bridgeSource).not.toContain('"executable": False'); - }); - - it("uses Hopper containment and raw-reference APIs without inferring kinds", () => { - expect(bridgeSource).toContain("segment.getProcedureAtAddress(address)"); - expect(bridgeSource).toContain("segment.getReferencesFromAddress(address)"); - expect(bridgeSource).toContain("segment.getReferencesOfAddress(address)"); - expect(bridgeSource).toContain( - "Hopper's public Python API does not classify reference kinds", - ); - }); - - it("scans procedure instructions for comments and typed reference evidence", () => { - expect(bridgeSource).toContain("for address in addresses:"); - expect(bridgeSource).toContain("segment.getCommentAtAddress(address)"); - expect(bridgeSource).toContain( - "segment.getInlineCommentAtAddress(address)", - ); - expect(bridgeSource).toContain('"source_procedure"'); - expect(bridgeSource).toContain('"target_procedure"'); - expect(bridgeSource).toContain('"outgoing_references"'); - expect(bridgeSource).toContain('"referenced_strings"'); - expect(bridgeSource).toContain('"referenced_names"'); - }); - - it("supports independent dossier continuation offsets", () => { - expect(bridgeSource).toContain('_offset(params, "pseudocode_offset")'); - expect(bridgeSource).toContain('_offset(params, "assembly_offset")'); - expect(bridgeSource).toContain('params.get("collection_offset", {})'); - }); - - it("provides a raw-instruction fast path without decompilation or global scans", () => { - const start = bridgeSource.indexOf("def _read_function_instructions"); - const end = bridgeSource.indexOf("\ndef _analyze_function", start); - const implementation = bridgeSource.slice(start, end); - expect(implementation).toContain("_instruction_addresses("); - expect(implementation).toContain("offset + limit + 1"); - expect(implementation).not.toContain("decompile("); - expect(implementation).not.toContain("_search_inventory("); - expect(implementation).not.toContain("_strings("); - expect(implementation).not.toContain("_name_map("); - expect(bridgeSource).toContain( - "pseudo = _pseudocode(document, procedure) or", - ); - expect(bridgeSource).toContain("return _pseudocode(document, procedure)"); - }); - - it("projects opaque Hopper locals into an exact provenance-bearing shape", () => { - expect(bridgeSource).toContain("def _procedure_locals(procedure):"); - expect(bridgeSource).toContain('"description": str(local)'); - expect(bridgeSource).not.toContain( - "_json_safe(procedure.getLocalVariableList())", - ); - }); - - it("stops background analysis and closes the session-owned document", () => { - expect(bridgeSource).toContain("def _session_document():"); - expect(bridgeSource).toContain("os.path.realpath(REA_TARGET_PATH)"); - expect(bridgeSource).toContain("document.getExecutableFilePath()"); - expect(bridgeSource).toContain("document.getDatabaseFilePath()"); - expect(bridgeSource).toContain("document.backgroundProcessActive()"); - expect(bridgeSource).toContain("document.requestBackgroundProcessStop()"); - expect(bridgeSource).toContain( - 'if method == "shutdown" and REA_OWNS_PROCESS_LIFETIME:', - ); - expect(bridgeSource).toContain('"cleanup_required": True'); - expect(bridgeSource).toContain( - 'method in ("shutdown", "shutdown_document")', - ); - expect(bridgeSource).toContain("document.waitForBackgroundProcessToEnd()"); - expect(bridgeSource).toContain("document.closeDocument()"); - expect(bridgeSource).toContain( - "document_closed = _session_document() is None", - ); - }); - - it("invalidates cached search inventories in both rename paths", () => { - const singleRenameStart = bridgeSource.indexOf( - 'if method == "set_address_name":', - ); - const bulkRenameStart = bridgeSource.indexOf( - 'if method == "set_addresses_names":', - singleRenameStart, - ); - const nextMethodStart = bridgeSource.indexOf( - 'if method in ("set_comment", "set_inline_comment"):', - bulkRenameStart, - ); - expect(singleRenameStart).toBeGreaterThan(-1); - expect(bulkRenameStart).toBeGreaterThan(singleRenameStart); - expect(nextMethodStart).toBeGreaterThan(bulkRenameStart); - expect(bridgeSource.slice(singleRenameStart, bulkRenameStart)).toContain( - "_invalidate_search_inventory(document)", - ); - expect(bridgeSource.slice(bulkRenameStart, nextMethodStart)).toContain( - "_invalidate_search_inventory(document)", - ); - }); - - it("returns deterministic addresses for direct procedure relationships", () => { - expect(bridgeSource).toContain( - "_hex(item.getEntryPoint()) for item in procedure.getAllCallerProcedures()", - ); - expect(bridgeSource).toContain( - "_hex(item.getEntryPoint()) for item in procedure.getAllCalleeProcedures()", - ); - expect(bridgeSource).not.toContain( - "_procedure_name(item) for item in procedure.getAllCallerProcedures()", - ); - expect(bridgeSource).not.toContain( - "_procedure_name(item) for item in procedure.getAllCalleeProcedures()", - ); - }); -}); diff --git a/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts b/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts index c3f3e95ef1..584313f71e 100644 --- a/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts +++ b/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts @@ -21,7 +21,13 @@ const probeResultSchema = z.strictObject({ }), current_document: z.literal("fixture"), current_address: z.literal("0x401000"), - session_document: z.literal("fixture"), + session_document_reused: z.literal(true), + shared_document_shutdown: z.strictObject({ + shutdown: z.literal(true), + analysis_stopped: z.literal(false), + document_closed: z.literal(false), + document_retained: z.literal(true), + }), analysis_guard: z.strictObject({ type: z.literal("CapabilityUnavailableError"), diagnostic_type: z.literal("capability_unavailable"), diff --git a/tests/boundary/providers/hopper/hopperClient.protocol.test.ts b/tests/boundary/providers/hopper/hopperClient.protocol.test.ts index 2ab7c97727..b5ced4aded 100644 --- a/tests/boundary/providers/hopper/hopperClient.protocol.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.protocol.test.ts @@ -153,7 +153,17 @@ describe("HopperClient protocol", () => { const client = await startClient(); const result = await client.callTool(method); expect(result.ok).toBe(false); - if (!result.ok) expect(result.error._tag).toBe(expectedTag); + if (!result.ok) { + expect(result.error._tag).toBe(expectedTag); + if (result.error._tag === "HopperRemoteError") + expect(result.error).toMatchObject({ operation: method, requestId: 2 }); + if (result.error._tag === "HopperTimeoutError") + expect(result.error).toMatchObject({ + operation: method, + requestId: 2, + providerState: "busy", + }); + } }); it("preserves a sanitized bridge exception diagnostic", async () => { diff --git a/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts b/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts index 8a475098b6..d1228742e2 100644 --- a/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts @@ -237,9 +237,7 @@ describe("HopperClient startup failures", () => { if (result.ok) return; const projected = projectAnalysisError(result.error); - expect(projected.message).toContain( - "rea doctor --provider hopper --detail full --json", - ); + expect(projected.message).toContain("rea doctor --provider hopper --json"); expect(projected.message).toContain("UI or license prompt"); expect(projected.message).toContain("close stale Hopper sessions"); expect(projected.details).toMatchObject({ diff --git a/tests/boundary/providers/managed/managedDirectAnalysis.test.ts b/tests/boundary/providers/managed/managedDirectAnalysis.test.ts index 1eadc52c9a..a1f2b56fa9 100644 --- a/tests/boundary/providers/managed/managedDirectAnalysis.test.ts +++ b/tests/boundary/providers/managed/managedDirectAnalysis.test.ts @@ -16,9 +16,7 @@ describe("managed direct-analysis path boundary", () => { await writeFile(path, buildManagedPeFixture()); const evidence = parseEvidence( - await runProviderAnalysis(path, "inspect_managed_artifact", { - reference_limit: 1, - }), + await runProviderAnalysis(path, "inspect_managed_artifact", {}), ); expect(evidence).toMatchObject({ operation: "inspect_managed_artifact", @@ -26,7 +24,7 @@ describe("managed direct-analysis path boundary", () => { subject: { local_path: path, format: "pe" }, normalized_result: { classification: { status: "managed", runtime_family: "modern-dotnet" }, - references: { limit: 1 }, + references: [expect.objectContaining({ name: "System.Runtime" })], }, }); @@ -39,7 +37,7 @@ describe("managed direct-analysis path boundary", () => { subject: { local_path: path, format: "pe" }, normalized_result: { identity_scope: { token_identity: "build-local" }, - methods: { total: 1 }, + methods: [expect.objectContaining({ token: expect.any(String) })], }, }); @@ -52,7 +50,7 @@ describe("managed direct-analysis path boundary", () => { subject: { local_path: path, format: "pe" }, normalized_result: { identity_scope: { token_identity: "build-local" }, - pinvoke_imports: { total: 0 }, + pinvoke_imports: [], }, }); }); diff --git a/tests/boundary/providers/managed/managedMemberComparison.test.ts b/tests/boundary/providers/managed/managedMemberComparison.test.ts index 154c341da5..c99179bf83 100644 --- a/tests/boundary/providers/managed/managedMemberComparison.test.ts +++ b/tests/boundary/providers/managed/managedMemberComparison.test.ts @@ -7,10 +7,7 @@ import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js import { compareManagedMemberPaths } from "../../../../src/application/ManagedMemberComparisonService.js"; import { managedMemberComparisonResultSchema } from "../../../../src/domain/managedMemberComparison.js"; -import { - buildManagedPeFixture, - MANAGED_MEMBER_PATH_FIXTURE_LIMITS, -} from "../../../../src/dotnet/ManagedPe.fixture.js"; +import { buildManagedPeFixture } from "../../../../src/dotnet/ManagedPe.fixture.js"; describe("managed member comparison path workflow", () => { it("compares two local paths and returns derived Evidence", async () => { @@ -26,12 +23,6 @@ describe("managed member comparison path workflow", () => { const result = await compareManagedMemberPaths({ leftPath, rightPath, - memberLimits: MANAGED_MEMBER_PATH_FIXTURE_LIMITS, - comparisonLimits: { - max_method_matches: 100, - max_field_matches: 100, - max_candidates: 10, - }, }); expect(result.ok).toBe(true); diff --git a/tests/boundary/providers/managed/managedStaticProvider.test.ts b/tests/boundary/providers/managed/managedStaticProvider.test.ts index 03766aceb6..523d993ed0 100644 --- a/tests/boundary/providers/managed/managedStaticProvider.test.ts +++ b/tests/boundary/providers/managed/managedStaticProvider.test.ts @@ -41,9 +41,9 @@ describe("managed static provider path boundary", () => { if (!members.ok) return; expect(asManagedMemberResult(members.value)).toMatchObject({ artifact: { path, sha256: parsed.value.sha256, format: "pe" }, - methods: { total: 1 }, - call_edges: { total: 1 }, - field_accesses: { total: 1 }, + methods: [expect.objectContaining({ token: "0x06000001" })], + call_edges: [expect.objectContaining({ target_name: ".ctor" })], + field_accesses: [expect.objectContaining({ field_name: "counter" })], }); const boundaries = await client.execute( @@ -54,9 +54,9 @@ describe("managed static provider path boundary", () => { if (!boundaries.ok) return; expect(asManagedNativeBoundaryResult(boundaries.value)).toMatchObject({ artifact: { path, sha256: parsed.value.sha256, format: "pe" }, - module_refs: { total: 0 }, - pinvoke_imports: { total: 0 }, - native_implementations: { total: 0 }, + module_refs: [], + pinvoke_imports: [], + native_implementations: [], }); const cancelled = new AbortController(); diff --git a/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts b/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts index e3f1897fbf..2a9eaad267 100644 --- a/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts +++ b/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts @@ -9,10 +9,7 @@ import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js import { runProviderAnalysis } from "../../../../src/application/DirectAnalysis.js"; import { ArtifactProvider } from "../../../../src/artifacts/ArtifactProvider.js"; -import { - artifactInspectionInputSchema, - artifactInventoryInputSchema, -} from "../../../../src/contracts/artifactToolContracts.js"; +import { artifactInspectionInputSchema } from "../../../../src/contracts/artifactToolContracts.js"; import { artifactInventoryResultSchema } from "../../../../src/domain/artifactGraph.js"; import { artifactInspectionResultSchema } from "../../../../src/domain/artifactInspection.js"; import type { BinaryTarget } from "../../../../src/domain/binaryTarget.js"; @@ -20,7 +17,7 @@ import { parseBinaryTarget } from "../../../../src/application/BinaryTargetResol import { parseEvidence } from "../../../../src/domain/evidence.js"; describe("artifact archive inventory", () => { - it("streams ZIP and official ASAR inventories within shared limits", async () => { + it("returns complete ZIP and official ASAR inventories inline", async () => { const root = await createTestTempDirectory("rea-containers-"); const zipPath = join(root, "fixture.apk"); const zipWriter = new ZipWriter(new Uint8ArrayWriter()); @@ -44,10 +41,7 @@ describe("artifact archive inventory", () => { subject: { format: "apk" }, }); const inspectionEvidence = parseEvidence( - await runProviderAnalysis(zipPath, "inspect_artifact", { - max_observations: 2, - max_relationships: 1, - }), + await runProviderAnalysis(zipPath, "inspect_artifact", {}), ); const inspection = artifactInspectionResultSchema.parse( inspectionEvidence.normalized_result, @@ -60,7 +54,7 @@ describe("artifact archive inventory", () => { evidence_id: expect.stringMatching(/^ev_[a-f0-9]{64}$/u), }, ], - coverage: { status: "truncated", substeps_completed: 1 }, + coverage: { status: "complete-within-substeps", substeps_completed: 1 }, }); expect(inspectionEvidence.evidence_links).toEqual( inspection.evidence_links, @@ -115,7 +109,7 @@ describe("artifact archive inventory", () => { ); const corrupted = await new ArtifactProvider() .createClient(target(unpackedPath, "asar")) - .execute("inventory_artifact", artifactInventoryInputSchema.parse({})); + .execute("inventory_artifact", {}); expect(corrupted).toMatchObject({ ok: false, error: { @@ -137,14 +131,9 @@ describe("artifact archive inventory", () => { }); }); const inventory = async (targetValue: BinaryTarget) => { - const result = await new ArtifactProvider().createClient(targetValue).execute( - "inventory_artifact", - artifactInventoryInputSchema.parse({ - node_limit: 500, - occurrence_limit: 500, - edge_limit: 500, - }), - ); + const result = await new ArtifactProvider() + .createClient(targetValue) + .execute("inventory_artifact", {}); if (!result.ok) throw result.error; return artifactInventoryResultSchema.parse(result.value.result); }; diff --git a/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts b/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts index 92e971375f..0c7e8a0112 100644 --- a/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts +++ b/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts @@ -12,10 +12,8 @@ import { normalizeArtifactPath, } from "../../../../src/artifacts/ArtifactPaths.js"; import { ArtifactProvider } from "../../../../src/artifacts/ArtifactProvider.js"; -import { - artifactExtractionInputSchema, - artifactInventoryInputSchema, -} from "../../../../src/contracts/artifactToolContracts.js"; +import { ArtifactReaderFailure } from "../../../../src/artifacts/ArtifactReader.js"; +import { artifactExtractionInputSchema } from "../../../../src/contracts/artifactToolContracts.js"; import { artifactInventoryResultSchema } from "../../../../src/domain/artifactGraph.js"; import type { BinaryTarget } from "../../../../src/domain/binaryTarget.js"; import { parseBinaryTarget } from "../../../../src/application/BinaryTargetResolver.js"; @@ -74,11 +72,7 @@ describe("artifact archive safety", () => { ); expect( parseEvidence( - await runProviderAnalysis(path, "inventory_artifact", { - node_limit: 10, - occurrence_limit: 10, - edge_limit: 10, - }), + await runProviderAnalysis(path, "inventory_artifact", {}), ), ).toMatchObject({ operation: "inventory_artifact", @@ -87,24 +81,39 @@ describe("artifact archive safety", () => { }, ); - it("rejects unsafe, colliding, and over-ratio entries", async () => { - expect(() => normalizeArtifactPath("../escape", limits())).toThrow( - /normalized/u, - ); + it("rejects unsafe paths, collisions, and default compression bombs", async () => { + let unsafePathError: unknown; + try { + normalizeArtifactPath("../escape", limits()); + } catch (error: unknown) { + unsafePathError = error; + } + expect(unsafePathError).toBeInstanceOf(ArtifactReaderFailure); + expect(unsafePathError).toMatchObject({ + reason: "path", + message: "Artifact path is not normalized", + }); const registry = new ArtifactPathRegistry(); registry.add("A.js", "file"); - expect(() => registry.add("a.js", "file")).toThrow(/collision/u); + let collisionError: unknown; + try { + registry.add("a.js", "file"); + } catch (error: unknown) { + collisionError = error; + } + expect(collisionError).toBeInstanceOf(ArtifactReaderFailure); + expect(collisionError).toMatchObject({ + reason: "path", + message: "Artifact path collision: a.js", + }); const root = await createTestTempDirectory("rea-bomb-"); const zipPath = join(root, "bomb.zip"); const writer = new ZipWriter(new Uint8ArrayWriter()); - await writer.add("zeros", new TextReader("0".repeat(100_000))); + await writer.add("zeros", new TextReader("0".repeat(10_000_000))); await writeFile(zipPath, await writer.close()); const client = new ArtifactProvider().createClient(target(zipPath, "zip")); - const result = await client.execute( - "inventory_artifact", - artifactInventoryInputSchema.parse({ max_compression_ratio: 2 }), - ); + const result = await client.execute("inventory_artifact", {}); expect(result).toMatchObject({ ok: false, error: { _tag: "ArtifactOperationError", reason: "limit" }, @@ -112,14 +121,9 @@ describe("artifact archive safety", () => { }); }); const inventory = async (targetValue: BinaryTarget) => { - const result = await new ArtifactProvider().createClient(targetValue).execute( - "inventory_artifact", - artifactInventoryInputSchema.parse({ - node_limit: 500, - occurrence_limit: 500, - edge_limit: 500, - }), - ); + const result = await new ArtifactProvider() + .createClient(targetValue) + .execute("inventory_artifact", {}); if (!result.ok) throw result.error; return artifactInventoryResultSchema.parse(result.value.result); }; diff --git a/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts b/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts index e328f94dae..4b061ce25c 100644 --- a/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts +++ b/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts @@ -6,7 +6,6 @@ import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js"; import { ArtifactProvider } from "../../../../src/artifacts/ArtifactProvider.js"; -import { artifactInventoryInputSchema } from "../../../../src/contracts/artifactToolContracts.js"; import { artifactInventoryResultSchema } from "../../../../src/domain/artifactGraph.js"; import type { BinaryTarget } from "../../../../src/domain/binaryTarget.js"; @@ -33,11 +32,7 @@ describe("artifact directory inventory", () => { const client = new ArtifactProvider().createClient( target(app, "directory"), ); - const input = artifactInventoryInputSchema.parse({ - node_limit: 500, - occurrence_limit: 500, - edge_limit: 500, - }); + const input = {}; const first = await client.execute("inventory_artifact", input); const second = await client.execute("inventory_artifact", input); expect(first.ok).toBe(true); diff --git a/tests/boundary/providers/native/artifactProvider.extraction.test.ts b/tests/boundary/providers/native/artifactProvider.extraction.test.ts index e59f28a115..a163d0742f 100644 --- a/tests/boundary/providers/native/artifactProvider.extraction.test.ts +++ b/tests/boundary/providers/native/artifactProvider.extraction.test.ts @@ -6,10 +6,7 @@ import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js"; import { ArtifactProvider } from "../../../../src/artifacts/ArtifactProvider.js"; -import { - artifactExtractionInputSchema, - artifactInventoryInputSchema, -} from "../../../../src/contracts/artifactToolContracts.js"; +import { artifactExtractionInputSchema } from "../../../../src/contracts/artifactToolContracts.js"; import { artifactExtractionResultSchema, artifactInventoryResultSchema, @@ -110,20 +107,17 @@ describe("artifact extraction", () => { ok: false, error: { _tag: "ArtifactOperationError", reason: "path" }, }); - expect(await readdir(root)).not.toEqual( - expect.arrayContaining([expect.stringMatching(/^\.output\.rea-/u)]), - ); + expect((await readdir(root)).sort()).toEqual([ + "output", + "relocated-output", + "source", + ]); }); }); const inventory = async (targetValue: BinaryTarget) => { - const result = await new ArtifactProvider().createClient(targetValue).execute( - "inventory_artifact", - artifactInventoryInputSchema.parse({ - node_limit: 500, - occurrence_limit: 500, - edge_limit: 500, - }), - ); + const result = await new ArtifactProvider() + .createClient(targetValue) + .execute("inventory_artifact", {}); if (!result.ok) throw result.error; return artifactInventoryResultSchema.parse(result.value.result); }; diff --git a/tests/boundary/providers/native/artifactProvider.paginationAndSlices.test.ts b/tests/boundary/providers/native/artifactProvider.machOSlices.test.ts similarity index 53% rename from tests/boundary/providers/native/artifactProvider.paginationAndSlices.test.ts rename to tests/boundary/providers/native/artifactProvider.machOSlices.test.ts index 0981d97e05..f9a1655474 100644 --- a/tests/boundary/providers/native/artifactProvider.paginationAndSlices.test.ts +++ b/tests/boundary/providers/native/artifactProvider.machOSlices.test.ts @@ -5,54 +5,12 @@ import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js"; -import { ArtifactProvider } from "../../../../src/artifacts/ArtifactProvider.js"; import { MachOSliceArtifactReader } from "../../../../src/artifacts/MachOSliceArtifactReader.js"; -import { artifactInventoryInputSchema } from "../../../../src/contracts/artifactToolContracts.js"; -import { artifactInventoryResultSchema } from "../../../../src/domain/artifactGraph.js"; -import type { BinaryTarget } from "../../../../src/domain/binaryTarget.js"; import { ok } from "../../../../src/domain/result.js"; import type { NativeCommandRunner } from "../../../../src/native/CommandRunner.js"; -describe("artifact pagination and slices", () => { - it("paginates wide graphs without changing manifest identity", async () => { - const root = await createTestTempDirectory("rea-wide-"); - await Promise.all( - Array.from({ length: 520 }, async (_, index) => - writeFile( - join(root, `file-${String(index).padStart(4, "0")}.txt`), - `${index}`, - ), - ), - ); - const client = new ArtifactProvider().createClient( - target(root, "directory"), - ); - const [first, secondPage] = await Promise.all([ - client.execute( - "inventory_artifact", - artifactInventoryInputSchema.parse({ occurrence_limit: 500 }), - ), - client.execute( - "inventory_artifact", - artifactInventoryInputSchema.parse({ - occurrence_offset: 500, - occurrence_limit: 500, - }), - ), - ]); - expect(first.ok && secondPage.ok).toBe(true); - if (!first.ok || !secondPage.ok) return; - const left = artifactInventoryResultSchema.parse(first.value.result); - const right = artifactInventoryResultSchema.parse(secondPage.value.result); - expect(left.manifest).toEqual(right.manifest); - expect(left.occurrences).toMatchObject({ total: 521, next_offset: 500 }); - expect(right.occurrences).toMatchObject({ - offset: 500, - next_offset: null, - }); - }, 15_000); - - it("uses bounded native lipo metadata for universal slice ranges", async () => { +describe("artifact Mach-O slices", () => { + it("uses lipo metadata to read universal slice ranges", async () => { const root = await createTestTempDirectory("rea-slices-"); const binary = join(root, "fat"); await writeFile(binary, Buffer.from("0123456789abcdef")); @@ -103,14 +61,3 @@ describe("artifact pagination and slices", () => { expect(reader.provenance()[0]?.tool).toBe("lipo"); }); }); - -const target = ( - path: string, - format: Extract["format"] | "directory", -): BinaryTarget => ({ - path, - sourcePath: path, - sha256: "0".repeat(64), - kind: "archive", - format: format === "directory" ? "asar" : format, -}); diff --git a/tests/boundary/providers/replay/javascriptReplay.test.ts b/tests/boundary/providers/replay/javascriptReplay.test.ts index e64e67094b..f71695b185 100644 --- a/tests/boundary/providers/replay/javascriptReplay.test.ts +++ b/tests/boundary/providers/replay/javascriptReplay.test.ts @@ -133,7 +133,6 @@ const input = ( const completedRunner = (): JavaScriptReplayRunner => ({ execute: async (prepared) => ({ - schema_version: 1, plan_digest: prepared.publicPlan.plan_digest, outcomes: [ { @@ -403,7 +402,6 @@ 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) => ({ - schema_version: 1, plan_digest: prepared.publicPlan.plan_digest, outcomes: [ { diff --git a/tests/composition/analysis-sessions/androidApplication.test.ts b/tests/composition/analysis-sessions/androidApplication.test.ts index 78eda59e7b..7f6453ee11 100644 --- a/tests/composition/analysis-sessions/androidApplication.test.ts +++ b/tests/composition/analysis-sessions/androidApplication.test.ts @@ -42,11 +42,7 @@ describe("Android application projection", () => { await writeFile(path, await writer.close()); const inventory = parseEvidence( - await runProviderAnalysis(path, "inventory_artifact", { - node_limit: 500, - occurrence_limit: 500, - edge_limit: 500, - }), + await runProviderAnalysis(path, "inventory_artifact", {}), ); const first = projectAndroidApplicationEvidence({ inventory_evidence: [inventory], diff --git a/tests/composition/analysis-sessions/appleApplication.test.ts b/tests/composition/analysis-sessions/appleApplication.test.ts index e55080edde..9fe392feca 100644 --- a/tests/composition/analysis-sessions/appleApplication.test.ts +++ b/tests/composition/analysis-sessions/appleApplication.test.ts @@ -49,11 +49,7 @@ describe("Apple application projection", () => { await writeFile(path, await writer.close()); const inventory = parseEvidence( - await runProviderAnalysis(path, "inventory_artifact", { - node_limit: 500, - occurrence_limit: 500, - edge_limit: 500, - }), + await runProviderAnalysis(path, "inventory_artifact", {}), ); const first = projectAppleApplicationEvidence({ inventory_evidence: [inventory], diff --git a/tests/composition/analysis-sessions/binarySession.02-runs-through-a-non-hopper.test.ts b/tests/composition/analysis-sessions/binarySession.02-runs-through-a-non-hopper.test.ts index 4f9957784b..82423e17bd 100644 --- a/tests/composition/analysis-sessions/binarySession.02-runs-through-a-non-hopper.test.ts +++ b/tests/composition/analysis-sessions/binarySession.02-runs-through-a-non-hopper.test.ts @@ -14,8 +14,6 @@ const nonHopperProvider = (operations: string[]): AnalysisProvider => { { provider: { id: "fixture", name: "Fixture", version: "1" }, operation: "address_name", - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", @@ -134,7 +132,6 @@ describe("binary session", () => { observation: { status: "verified", observed_at: "2026-07-22T10:00:00.000Z", - schema_version: 1, launcher_pid: 100, launcher_parent_pid: 1, process_group_id: 100, diff --git a/tests/composition/analysis-sessions/binarySession.04-replays-exact-immutable-calls-from.test.ts b/tests/composition/analysis-sessions/binarySession.04-replays-exact-immutable-calls-from.test.ts index 56da164430..9ffba55b4c 100644 --- a/tests/composition/analysis-sessions/binarySession.04-replays-exact-immutable-calls-from.test.ts +++ b/tests/composition/analysis-sessions/binarySession.04-replays-exact-immutable-calls-from.test.ts @@ -89,7 +89,6 @@ describe("binary session", () => { name: identity.name, version: identity.version ?? "fixture-unresolved", }, - 1, { fixture: "different-profile" }, ), compatibility: {}, diff --git a/tests/composition/analysis-sessions/binarySession.05-publishes-provider-health-availability-changes.test.ts b/tests/composition/analysis-sessions/binarySession.05-publishes-provider-health-availability-changes.test.ts index 8ca20de018..47fd810444 100644 --- a/tests/composition/analysis-sessions/binarySession.05-publishes-provider-health-availability-changes.test.ts +++ b/tests/composition/analysis-sessions/binarySession.05-publishes-provider-health-availability-changes.test.ts @@ -34,7 +34,8 @@ describe("binary session", () => { expect.objectContaining({ operation: "address_name", available: false, - reason: "Provider became unavailable during this session.", + reason: + "ProviderAdapterError: Provider fixture adapter failed during address_name", }), ]), }); diff --git a/tests/composition/analysis-sessions/binarySession.06-returns-typed-unavailability-without-dispatching.test.ts b/tests/composition/analysis-sessions/binarySession.06-returns-typed-unavailability-without-dispatching.test.ts index 3ba62fe432..60bcd78bc3 100644 --- a/tests/composition/analysis-sessions/binarySession.06-returns-typed-unavailability-without-dispatching.test.ts +++ b/tests/composition/analysis-sessions/binarySession.06-returns-typed-unavailability-without-dispatching.test.ts @@ -28,8 +28,6 @@ describe("binary session", () => { { provider: { id: "partial", name: "Partial", version: "1" }, operation: "address_name", - inputContractVersion: 1, - outputContractVersion: 1, available: false, reason: "fixture intentionally omits symbol lookup", pagination: "none", diff --git a/tests/composition/analysis-sessions/compositeProvider.test.ts b/tests/composition/analysis-sessions/compositeProvider.test.ts index 4ba2b2d7ab..5629136866 100644 --- a/tests/composition/analysis-sessions/compositeProvider.test.ts +++ b/tests/composition/analysis-sessions/compositeProvider.test.ts @@ -200,8 +200,6 @@ const capability = ( ): CapabilityDescriptor => ({ provider: providerIdentity, operation, - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", diff --git a/tests/composition/analysis-sessions/crossVersionInventory.test.ts b/tests/composition/analysis-sessions/crossVersionInventory.test.ts index ff59ebff45..ea4946f08c 100644 --- a/tests/composition/analysis-sessions/crossVersionInventory.test.ts +++ b/tests/composition/analysis-sessions/crossVersionInventory.test.ts @@ -45,10 +45,9 @@ describe("cross-version inventory", () => { const calls: string[] = []; const controller = new AbortController(); const scanner: VersionInventoryScanner = (...arguments_) => { - const [path, roots, limits, options] = arguments_; + const [path, limits, options] = arguments_; if (options === undefined) throw new Error("Expected scanner options"); calls.push(path); - expect(roots).toEqual([root]); expect(limits).toBe(LIMITS); expect(options.signal).toBe(controller.signal); expect(options.integrity).toBe(INTEGRITY); @@ -59,7 +58,6 @@ describe("cross-version inventory", () => { { leftPath: "left", rightPath: "right", - inputRoots: [root], limits: LIMITS, signal: controller.signal, integrity: INTEGRITY, @@ -87,7 +85,6 @@ describe("cross-version inventory", () => { { leftPath: "left", rightPath: "right", - inputRoots: ["/approved"], limits: LIMITS, integrity: INTEGRITY, }, diff --git a/tests/composition/analysis-sessions/managedApplicationGraph.test.ts b/tests/composition/analysis-sessions/managedApplicationGraph.test.ts index ecf21072ec..fa850ff625 100644 --- a/tests/composition/analysis-sessions/managedApplicationGraph.test.ts +++ b/tests/composition/analysis-sessions/managedApplicationGraph.test.ts @@ -71,13 +71,6 @@ describe("managed application graph projection", () => { managed_artifact: artifactEvidence, managed_members: memberEvidence, managed_native_boundaries: boundaryEvidence, - limits: { - max_types: 100, - max_methods: 100, - max_fields: 100, - max_pinvoke_imports: 100, - max_native_implementations: 100, - }, }); expect( @@ -154,15 +147,10 @@ describe("managed application graph projection", () => { case_sensitive: true, }, direction: "incoming", - limits: { - max_seed_matches: 5, - max_depth: 4, - max_nodes: 50, - max_edges: 100, - max_paths: 10, - }, }); - expect(trace.ok).toBe(true); + expect(trace.ok, trace.ok ? undefined : JSON.stringify(trace.error)).toBe( + true, + ); if (!trace.ok) throw new Error("trace failed"); expect(trace.value.normalized_result).toMatchObject({ source_evidence_id: parsed.evidence_id, @@ -172,7 +160,7 @@ describe("managed application graph projection", () => { }); describe("managed application graph coverage", () => { - it("preserves source-page omissions in graph and per-fact coverage", () => { + it("preserves partial parser coverage in graph and per-fact coverage", () => { const bytes = buildManagedPeFixture(); const binary = managedPeFixtureTarget(bytes, "/fixture/ManagedInterop.exe"); const members = inspectManagedMembersBytes( @@ -180,76 +168,8 @@ describe("managed application graph coverage", () => { binary, MANAGED_MEMBER_FIXTURE_LIMITS, ); - const partialMembers = { - ...members, - methods: { - ...members.methods, - total: 2, - returned: 1, - dropped: 1, - complete: false, - }, - }; - const memberEvidence = createEvidence(binary, MANAGED_STATIC_PROVIDER, { - operation: "inspect_managed_members", - parameters: {}, - result: partialMembers, - rawResult: null, - limitations: partialMembers.limitations, - locations: [{ kind: "artifact-path", path: binary.path }], - }); - - const evidence = projectManagedApplicationGraphEvidence({ - managed_members: memberEvidence, - limits: { - max_types: 100, - max_methods: 100, - max_fields: 100, - max_pinvoke_imports: 100, - max_native_implementations: 100, - }, - }); - - expect( - evidence.ok, - evidence.ok - ? undefined - : `${JSON.stringify(evidence.error)} cause=${String(evidence.error.cause)}`, - ).toBe(true); - if (!evidence.ok) throw new Error("projection failed"); - const result = managedApplicationGraphResultSchema.parse( - parseEvidence(evidence.value).normalized_result, - ); - const graph = parseJavaScriptApplicationGraph(result.graph); - expect(result.coverage).toMatchObject({ - status: "truncated", - omitted_types: 0, - omitted_methods: 1, - omitted_fields: 0, - }); - expect(graph.coverage).toMatchObject({ - status: "partial", - truncated: true, - omitted_count: 1, - }); - const method = graph.nodes.find(({ kind }) => kind === "managed-method"); - expect(method?.observations[0]?.evidence.coverage).toMatchObject({ - status: "partial", - truncated: true, - omitted_count: 1, - }); - expect( - graph.edges.find( - ({ target_node_id }) => target_node_id === method?.node_id, - )?.evidence.coverage, - ).toMatchObject({ - status: "partial", - truncated: true, - omitted_count: 1, - }); - const parserPartialMembers = { - ...partialMembers, + ...members, coverage: { state: "partial" as const, issues: [ @@ -275,13 +195,6 @@ describe("managed application graph coverage", () => { ); const parserPartialProjection = projectManagedApplicationGraphEvidence({ managed_members: parserPartialEvidence, - limits: { - max_types: 100, - max_methods: 100, - max_fields: 100, - max_pinvoke_imports: 100, - max_native_implementations: 100, - }, }); expect(parserPartialProjection.ok).toBe(true); @@ -292,7 +205,6 @@ describe("managed application graph coverage", () => { ); expect(parserPartialResult.coverage).toMatchObject({ status: "partial", - omitted_methods: 1, }); expect(parserPartialResult.graph.coverage).toEqual({ status: "partial", diff --git a/tests/composition/analysis-sessions/providerBinding.test.ts b/tests/composition/analysis-sessions/providerBinding.test.ts index b7c1b673bd..055dbb8289 100644 --- a/tests/composition/analysis-sessions/providerBinding.test.ts +++ b/tests/composition/analysis-sessions/providerBinding.test.ts @@ -219,7 +219,6 @@ const deepProvider = (id: string): DeepProviderFixture => { ok({ profile: createAnalysisProfile( { id, name: identity.name, version: "1" }, - 1, { provider: id }, ), compatibility: {}, @@ -295,8 +294,6 @@ const capability = ( ): CapabilityDescriptor => ({ provider, operation, - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", diff --git a/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts b/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts index 96f1ba8e3b..fc89fd7c61 100644 --- a/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts +++ b/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts @@ -1,49 +1,41 @@ -import { join } from "node:path"; - import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { analyzeJavaScriptApplication } from "../../../src/application/JavaScriptApplicationService.js"; -import { PermissionAuthority } from "../../../src/application/PermissionAuthority.js"; import { reconstructJavaScriptArtifact } from "../../../src/application/JavaScriptArtifactReconstruction.js"; import { parseEvidence } from "../../../src/domain/evidence.js"; import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascriptApplicationGraph.js"; import { analyzeJavaScriptApplicationInputSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; -import { createPermissionPolicy } from "../../../src/domain/permissionPolicy.js"; import { writeElectronBoundaryFixture } from "../../fixtures/electronBoundaryApplication.js"; describe("static Electron application analysis", () => { - it("requires explicit approval, an absolute path, and graph-safe combined bounds", () => { + it("accepts a caller path and caller-selected analysis bounds", () => { expect( analyzeJavaScriptApplicationInputSchema.safeParse({ input_path: "relative/app.asar", - approved: true, }).success, ).toBe(false); expect( analyzeJavaScriptApplicationInputSchema.safeParse({ input_path: "/tmp/app.asar", }).success, - ).toBe(false); + ).toBe(true); expect( analyzeJavaScriptApplicationInputSchema.safeParse({ input_path: "/tmp/app.asar", - approved: true, limits: { max_entries: 100_000, max_findings: 200_000, }, }).success, - ).toBe(false); + ).toBe(true); expect( analyzeJavaScriptApplicationInputSchema.parse({ input_path: "/tmp/app.asar", - approved: true, }), ).toMatchObject({ format: "auto", - source_map_read_approved: false, limits: { max_findings: 8_000 }, }); }); @@ -65,42 +57,27 @@ describe("static Electron application analysis", () => { expectElectronBoundaries(graph); }); - it("returns Evidence v2 only after exact investigation-input authorization", async () => { + it("analyzes the selected local application directory directly", async () => { const root = await fixtureDirectory(); - const authority = permissionAuthority(root); - const result = await analyzeJavaScriptApplication(authority, { + const result = await analyzeJavaScriptApplication({ input_path: root, - approved: true, }); if (!result.ok) throw result.error; const evidence = parseEvidence(result.value); expect(evidence).toMatchObject({ operation: "analyze_javascript_application", - predicate_type: "rea.javascript-application-analysis/v2", + predicate_type: "rea.javascript-application-analysis", provider: { id: "rea-javascript-application" }, authority: "shipped-artifact", confidence: "derived", subject: { local_path: root, format: "directory" }, normalized_result: { - schema_version: 2, input_path: root, summary: { browser_windows: 3 }, }, }); - - const denied = await analyzeJavaScriptApplication( - permissionAuthority(root), - { - input_path: join(root, ".."), - approved: true, - }, - ); - expect(denied).toMatchObject({ - ok: false, - error: { _tag: "PermissionRequiredError" }, - }); }); it("returns a tagged cancellation without executing application code", async () => { @@ -110,8 +87,7 @@ describe("static Electron application analysis", () => { Reflect.deleteProperty(globalThis, "__rea_electron_fixture_executed"); const result = await analyzeJavaScriptApplication( - permissionAuthority(root), - { input_path: root, approved: true }, + { input_path: root }, { signal: controller.signal }, ); @@ -313,28 +289,3 @@ const fixtureDirectory = async (): Promise => { await writeElectronBoundaryFixture(root); return root; }; - -const permissionAuthority = (root: string): PermissionAuthority => - new PermissionAuthority( - createPermissionPolicy( - [scope(root)], - [ - { - ...scope(root), - grant_id: "test:investigation-input", - lifetime: "session", - operation_identity: null, - expires_at: null, - }, - ], - ), - ); - -const scope = (root: string) => ({ - capability: "investigation_input" as const, - roots: [root], - executables: [], - environment_names: [], - network: "none" as const, - mount: false, -}); diff --git a/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts b/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts index c65d67999f..1e2165e83e 100644 --- a/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts +++ b/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts @@ -9,7 +9,7 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { reconstructJavaScriptArtifact } from "../../../src/application/JavaScriptArtifactReconstruction.js"; import { scanArtifactInventory } from "../../../src/application/ArtifactInventory.js"; import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascriptApplicationGraph.js"; -import { javaScriptApplicationAnalysisResultV2Schema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; import { createJavaScriptSemanticGraph } from "../../../src/domain/javascriptSemanticGraph.js"; import { parseJavaScriptSemanticGraph } from "../../../src/domain/javascriptSemanticGraphSerialization.js"; import { writeJavaScriptArtifactFixture } from "../../fixtures/javascriptArtifactApplication.js"; @@ -20,7 +20,6 @@ it("reconstructs package, Electron roles, Webpack/Rspack modules, and cross-laye const result = await reconstructJavaScriptArtifact({ input_path: root, - source_map_read_approved: true, }); const graph = parseJavaScriptApplicationGraph(result.graph); const semanticGraph = parseJavaScriptSemanticGraph(result.semantic_graph); @@ -31,7 +30,6 @@ it("reconstructs package, Electron roles, Webpack/Rspack modules, and cross-laye modules: 4, parse_failures: 0, omitted_text_files: 0, - policy_filtered_text_files: 0, }); expect(graph.nodes.map(({ kind }) => kind)).toEqual( expect.arrayContaining([ @@ -111,12 +109,10 @@ it("produces deterministic ASAR graphs with unpacked native linkage and complete const first = await reconstructJavaScriptArtifact({ input_path: archive, format: "asar", - source_map_read_approved: true, }); const second = await reconstructJavaScriptArtifact({ input_path: archive, format: "asar", - source_map_read_approved: true, }); expect(first.graph).toEqual(second.graph); @@ -191,7 +187,6 @@ it("keeps ASAR analysis usable when unpacked native companion bytes are absent", const result = await reconstructJavaScriptArtifact({ input_path: archive, format: "asar", - source_map_read_approved: true, }); expect(result.statistics.parsed_javascript_files).toBeGreaterThan(0); @@ -214,7 +209,6 @@ it("recurses into filesystem-backed ASAR containers without losing container-rel const result = await reconstructJavaScriptArtifact({ input_path: outer, - source_map_read_approved: true, }); expect(result.statistics.nested_asar_containers).toBe(1); @@ -257,9 +251,8 @@ const assertSemanticLinks = ( }); const { electron_summary: summary, ...analysisResult } = result; expect(() => - javaScriptApplicationAnalysisResultV2Schema.parse({ + javascriptApplicationAnalysisResultSchema.parse({ ...analysisResult, - schema_version: 2, summary, semantic_graph: mismatchedSemanticGraph, }), diff --git a/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts b/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts index 412018e2e2..35dc39be5b 100644 --- a/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts +++ b/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts @@ -13,7 +13,6 @@ import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain import { electronActiveObservationInputSchema } from "../../../src/domain/electronActiveObservation.js"; import { inspectElectronPageInputSchema } from "../../../src/domain/electronObservation.js"; import { createWebTextArtifact } from "../../../src/domain/webContentArtifact.js"; -import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; import { createElectronActiveObservationFixtureResult } from "../../../src/domain/electronActiveObservation.fixture.js"; const SOURCE = `const worker = new Worker("./worker.js");\nexport const observed = worker;\n`; @@ -165,7 +164,7 @@ it("keeps source-map declarations outside primary matching authority", async () expect(result.source_map_authority).toMatchObject({ used_for_primary_matching: false, - static_layers_with_read_approval: 0, + static_layer_count: 1, runtime_script_declarations: 0, }); }); @@ -175,7 +174,6 @@ it("reconciles active Electron as a partial target-only runtime capture", async const staticEvidence = await analyzeFixture(fixture); const applicationPath = join(fixture, "main.js"); const input = electronActiveObservationInputSchema.parse({ - schema_version: 1, executable_path: process.execPath, application_path: applicationPath, application_root: fixture, @@ -217,7 +215,6 @@ it("hashes the retained Electron scenario projection, not raw selectors or secre const applicationPath = join(fixture, "main.js"); const makeInput = (secret: string, selector: string) => electronActiveObservationInputSchema.parse({ - schema_version: 1, executable_path: process.execPath, application_path: applicationPath, application_root: fixture, @@ -331,14 +328,8 @@ const applicationFixture = async (): Promise => { }; const analyzeFixture = async (root: string) => { - const authority = await permissionAuthorityForRoot( - root, - ["investigation_input"], - ["investigation_input"], - ); - const result = await analyzeJavaScriptApplication(authority, { + const result = await analyzeJavaScriptApplication({ input_path: root, - approved: true, }); if (!result.ok) throw result.error; return result.value; @@ -381,7 +372,6 @@ const electronRuntimeEvidence = ( "inspect_electron_page", input, { - schema_version: 1, browser: { product: "Electron/fixture", protocol_version: "1.3", diff --git a/tests/conformance/README.md b/tests/conformance/README.md index 60baa45b24..3087313364 100644 --- a/tests/conformance/README.md +++ b/tests/conformance/README.md @@ -4,8 +4,8 @@ These sources are deliberately small semantic oracles for REA providers. Run `npm run verify:fixtures` on macOS or Linux to compile them into the ignored `build/conformance/` directory, emit a hash-and-toolchain manifest, and verify their platform-native symbols and strings with local command-line tools. The -portable C, version, and pagination fixtures build as Mach-O on macOS and ELF on -Linux; Objective-C, Swift, and N-API-like fixtures remain macOS-only. +portable C, version, and large-inventory fixtures build as Mach-O on macOS and +ELF on Linux; Objective-C, Swift, and N-API-like fixtures remain macOS-only. Only source files are versioned. Generated binaries, generated large-fixture source, debug information, and manifests must remain under `build/`. @@ -23,9 +23,9 @@ digest linkage, transport, and cleanup on the self-hosted real-Ghidra runner. The C fixture fixes a known call chain and strings. The version pair fixes an added symbol, changed string, and changed call relationship. The generated -large fixture contains 1,205 uniquely named functions and strings so provider -pagination can be checked at boundaries of 500, 1,000, and 1,205. Objective-C, -Swift, and N-API-like fixtures provide metadata-oriented inputs without package +large fixture contains 1,205 uniquely named functions and strings to verify that +providers return complete inventories. Objective-C, Swift, and N-API-like +fixtures provide metadata-oriented inputs without package or network dependencies. `readiness/` adds source-only generated JavaScript CLI and Electron fixtures for diff --git a/tests/conformance/contracts/analysisErrorProjection.test.ts b/tests/conformance/contracts/analysisErrorProjection.test.ts index 2d0b177713..a3633c8891 100644 --- a/tests/conformance/contracts/analysisErrorProjection.test.ts +++ b/tests/conformance/contracts/analysisErrorProjection.test.ts @@ -82,7 +82,10 @@ describe("analysis error projection contract", () => { "invalid_request", "bridge_exception", ] as const - ).map((diagnostic) => new HopperRemoteError(9, "safe", diagnostic)), + ).map( + (diagnostic) => + new HopperRemoteError(9, "safe", { diagnosticType: diagnostic }), + ), ]; expect(variants).toHaveLength(39); diff --git a/tests/conformance/providers/conformanceFixtures.test.ts b/tests/conformance/providers/conformanceFixtures.test.ts index 225b9da398..ab27398f0c 100644 --- a/tests/conformance/providers/conformanceFixtures.test.ts +++ b/tests/conformance/providers/conformanceFixtures.test.ts @@ -25,14 +25,16 @@ describe("source-built conformance fixtures", () => { expect(source).toContain(HOPPER_C_ORACLE.globalName); }); - it("generates a deterministic large pagination fixture", () => { + it("generates a deterministic large complete-inventory fixture", () => { const first = generateLargeFixture(); const second = generateLargeFixture(); expect(first).toBe(second); - expect(first.match(/int rea_page_/gu)).toHaveLength(LARGE_FIXTURE_COUNT); - expect(first).toContain("rea_page_0000"); - expect(first).toContain("rea_page_1204"); + expect(first.match(/int rea_inventory_/gu)).toHaveLength( + LARGE_FIXTURE_COUNT, + ); + expect(first).toContain("rea_inventory_0000"); + expect(first).toContain("rea_inventory_1204"); expect(() => generateLargeFixture(0)).toThrow(/positive integer/u); }); diff --git a/tests/conformance/providers/coverageMonotonicity.test.ts b/tests/conformance/providers/coverageMonotonicity.test.ts deleted file mode 100644 index 5e5ad1b3fd..0000000000 --- a/tests/conformance/providers/coverageMonotonicity.test.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { fc, it } from "@fast-check/vitest"; -import { describe, expect } from "vitest"; - -import { - assessManagedGraphOmissions, - managedGraphEvidenceCoverage, - totalManagedGraphOmitted, - type ManagedGraphProjectionLimits, -} from "../../../src/domain/managedApplicationGraphCoverage.js"; -import { - assessKnownPageCoverage, - type KnownCollectionPage, -} from "../../../src/domain/knownPageCoverage.js"; -import { inspectManagedMembersBytes } from "../../../src/dotnet/ManagedMemberInspector.js"; -import { inspectManagedNativeBoundariesBytes } from "../../../src/dotnet/ManagedNativeBoundaryInspector.js"; -import { - buildManagedPeFixture, - managedPeFixtureTarget, - MANAGED_MEMBER_FIXTURE_LIMITS, - MANAGED_NATIVE_BOUNDARY_FIXTURE_LIMITS, -} from "../../../src/dotnet/ManagedPe.fixture.js"; - -const limitPair = fc - .tuple(fc.integer({ min: 1, max: 12 }), fc.integer({ min: 1, max: 12 })) - .map( - ([first, second]) => - [Math.min(first, second), Math.max(first, second)] as const, - ); - -describe("coverage monotonicity", () => { - it.prop([fc.integer({ min: 0, max: 200 }), limitPair])( - "never makes a smaller source page more complete", - (total, [smallerLimit, largerLimit]) => { - const smaller = assessKnownPageCoverage(sourcePage(total, smallerLimit)); - const larger = assessKnownPageCoverage(sourcePage(total, largerLimit)); - - expect(smaller.includedCount).toBeLessThanOrEqual(larger.includedCount); - expect(smaller.omittedCount).toBeGreaterThanOrEqual(larger.omittedCount); - expect(smaller.sourceOmittedCount).toBeGreaterThanOrEqual( - larger.sourceOmittedCount, - ); - if (smaller.complete) expect(larger.complete).toBe(true); - }, - ); - - it.prop([fc.integer({ min: 0, max: 200 }), limitPair])( - "never makes a smaller downstream projection more complete", - (total, [smallerLimit, largerLimit]) => { - const page = sourcePage(total, Math.max(1, total)); - const smaller = assessKnownPageCoverage(page, smallerLimit); - const larger = assessKnownPageCoverage(page, largerLimit); - - expect(smaller.includedCount).toBeLessThanOrEqual(larger.includedCount); - expect(smaller.omittedCount).toBeGreaterThanOrEqual(larger.omittedCount); - expect(smaller.sourceComplete).toBe(larger.sourceComplete); - if (smaller.complete) expect(larger.complete).toBe(true); - }, - ); - - it.prop([ - fc.array(fc.integer({ min: 0, max: 12 }), { - minLength: 5, - maxLength: 5, - }), - fc.array(limitPair, { minLength: 5, maxLength: 5 }), - ])( - "does not improve aggregate managed graph coverage when projection limits shrink", - (totals, pairs) => { - const sources = managedSources(totals); - const smaller = assessManagedGraphOmissions( - sources, - graphLimits(pairs, 0), - ); - const larger = assessManagedGraphOmissions( - sources, - graphLimits(pairs, 1), - ); - const smallerCoverage = managedGraphEvidenceCoverage(smaller); - const largerCoverage = managedGraphEvidenceCoverage(larger); - - expect(totalManagedGraphOmitted(smaller)).toBeGreaterThanOrEqual( - totalManagedGraphOmitted(larger), - ); - expect(smaller.types).toBeGreaterThanOrEqual(larger.types); - expect(smaller.methods).toBeGreaterThanOrEqual(larger.methods); - expect(smaller.fields).toBeGreaterThanOrEqual(larger.fields); - expect(smaller.pinvokeImports).toBeGreaterThanOrEqual( - larger.pinvokeImports, - ); - expect(smaller.nativeImplementations).toBeGreaterThanOrEqual( - larger.nativeImplementations, - ); - if (smallerCoverage.status === "complete") - expect(largerCoverage.status).toBe("complete"); - }, - ); - - it("does not let wider projection limits repair parser-unknown input", () => { - const sources = managedSources([2, 2, 2, 2, 2]); - const partialSources = { - ...sources, - members: { - ...sources.members, - coverage: { - state: "partial" as const, - issues: [ - { - code: "limit-exceeded" as const, - scope: "method.0x06000001.body.instructions", - offset: 0x0a00, - detail: "instruction limit reached", - }, - ], - }, - }, - }; - const narrow = managedGraphEvidenceCoverage( - assessManagedGraphOmissions(partialSources, constantGraphLimits(1)), - ); - const wide = managedGraphEvidenceCoverage( - assessManagedGraphOmissions(partialSources, constantGraphLimits(100)), - ); - - expect(narrow).toMatchObject({ - status: "partial", - truncated: false, - omitted_count: null, - }); - expect(wide).toEqual(narrow); - }); -}); - -const sourcePage = ( - total: number, - limit: number, -): KnownCollectionPage => { - const returned = Math.min(total, limit); - return { - items: Array.from({ length: returned }, (_, index) => index), - offset: 0, - limit, - total, - returned, - complete: returned === total, - }; -}; - -const fixtureBytes = buildManagedPeFixture({ - pinvoke: { - moduleName: "user32.dll", - importName: "MessageBoxW", - mappingFlags: 0x0345, - }, - readyToRun: true, -}); -const fixtureTarget = managedPeFixtureTarget( - fixtureBytes, - "/fixture/ManagedCoverage.exe", -); -const fixtureMembers = inspectManagedMembersBytes( - fixtureBytes, - fixtureTarget, - MANAGED_MEMBER_FIXTURE_LIMITS, -); -const fixtureBoundaries = inspectManagedNativeBoundariesBytes( - fixtureBytes, - fixtureTarget, - MANAGED_NATIVE_BOUNDARY_FIXTURE_LIMITS, -); - -const managedSources = (totals: readonly number[]) => ({ - artifact: null, - members: { - ...fixtureMembers, - types: repeatPage(fixtureMembers.types, totals[0] ?? 0), - methods: repeatPage(fixtureMembers.methods, totals[1] ?? 0), - fields: repeatPage(fixtureMembers.fields, totals[2] ?? 0), - }, - boundaries: { - ...fixtureBoundaries, - pinvoke_imports: repeatPage( - fixtureBoundaries.pinvoke_imports, - totals[3] ?? 0, - ), - native_implementations: repeatPage( - fixtureBoundaries.native_implementations, - totals[4] ?? 0, - ), - }, -}); - -const repeatPage = >( - page: Page, - total: number, -) => { - const first = page.items[0]; - const items = - first === undefined ? [] : Array.from({ length: total }, () => first); - return { - ...page, - items, - offset: 0, - limit: Math.max(1, total), - total, - returned: total, - complete: true, - }; -}; - -const graphLimits = ( - pairs: readonly (readonly [number, number])[], - index: 0 | 1, -): ManagedGraphProjectionLimits => ({ - max_types: pairs[0]?.[index] ?? 1, - max_methods: pairs[1]?.[index] ?? 1, - max_fields: pairs[2]?.[index] ?? 1, - max_pinvoke_imports: pairs[3]?.[index] ?? 1, - max_native_implementations: pairs[4]?.[index] ?? 1, -}); - -const constantGraphLimits = (value: number): ManagedGraphProjectionLimits => ({ - max_types: value, - max_methods: value, - max_fields: value, - max_pinvoke_imports: value, - max_native_implementations: value, -}); diff --git a/tests/conformance/providers/hopper/realHopperAssertions.test.ts b/tests/conformance/providers/hopper/realHopperAssertions.test.ts index 42d902d4c8..7c118bf7a9 100644 --- a/tests/conformance/providers/hopper/realHopperAssertions.test.ts +++ b/tests/conformance/providers/hopper/realHopperAssertions.test.ts @@ -17,20 +17,11 @@ describe("real Hopper semantic assertions", () => { expect(() => requireDistinctTargetHashes("", "other")).toThrow(); expect(() => requireDistinctTargetHashes("first", "second")).not.toThrow(); }); - it("extracts only a real procedure address from a structured page", () => { - expect( - firstProcedureAddress({ - items: [{ address: "0x1000", name: "main" }], - offset: 0, - limit: 100, - total: 1, - next_offset: null, - has_more: false, - }), - ).toBe("0x1000"); - expect(() => - firstProcedureAddress({ items: { address: "0x1000" } }), - ).toThrow(); + it("extracts a real procedure address from the complete inventory", () => { + expect(firstProcedureAddress([{ address: "0x1000", name: "main" }])).toBe( + "0x1000", + ); + expect(() => firstProcedureAddress({ address: "0x1000" })).toThrow(); expect(() => firstProcedureAddress({ items: [{ address: "items" }] }), ).toThrow(); @@ -54,38 +45,20 @@ describe("real Hopper semantic assertions", () => { requireFunctionDossier( { ...dossier, - pseudocode: { - text: "Error: failed", - returned_chars: 13, - total_chars: 13, - }, + pseudocode: "Error: failed", }, "0x1000", ), ).toThrow(/embedded failure/u); - expect(() => - requireFunctionDossier( - { ...dossier, instruction_scan: { scanned: 0, truncated: false } }, - "0x1000", - ), - ).toThrow(/instruction scan/u); + expect(requireFunctionDossier(dossier, "0x1000")).not.toHaveProperty( + "instruction_scan", + ); }); - it("counts Unicode code points and accepts terminal scan truncation", () => { + it("accepts a complete inline dossier", () => { const dossier = validDossier(); - const scanLimited = { - ...dossier, - pseudocode: { text: "😀", returned_chars: 1, total_chars: 1 }, - comments: { - items: [], - total: null, - returned: 0, - truncated: true, - next_offset: null, - }, - instruction_scan: { scanned: 1, truncated: true }, - }; - expect(requireFunctionDossier(scanLimited, "0x1000")).toEqual(scanLimited); + const complete = { ...dossier, pseudocode: "😀" }; + expect(requireFunctionDossier(complete, "0x1000")).toEqual(complete); }); }); @@ -124,7 +97,7 @@ describe("real Hopper fixture assertions", () => { ] as const) { expect(() => requireFunctionDossierOracle( - { ...entry, [field]: emptyCollection() }, + { ...entry, [field]: [] }, { procedure_address: "0x1000", callee_address: "0x2000", @@ -142,13 +115,13 @@ describe("real Hopper fixture assertions", () => { requireFunctionDossierOracle( { ...entry, - referenced_names: bounded([ + referenced_names: [ { address: "0x4000", value: "_rea_c_global", source_address: "0x2000", }, - ]), + ], }, { procedure_address: "0x1000", @@ -160,7 +133,7 @@ describe("real Hopper fixture assertions", () => { requireFunctionDossierOracle( { ...entry, - basic_blocks: bounded([{ start: "0x1000", successors: [] }]), + basic_blocks: [{ start: "0x1000", successors: [] }], }, { procedure_address: "0x1000", @@ -185,13 +158,11 @@ const fixtureDossier = (input: { }) => ({ ...validDossier(), procedure: { address: input.address, name: input.name }, - assembly: bounded(["mov eax, eax"]), - comments: bounded([ - { address: input.address, kind: "comment", text: input.comment }, - ]), - callees: bounded([input.callee]), - callers: bounded([input.caller]), - outgoing_references: bounded([ + assembly: ["mov eax, eax"], + comments: [{ address: input.address, kind: "comment", text: input.comment }], + callees: [input.callee], + callers: [input.caller], + outgoing_references: [ { source_address: input.address, target_address: input.callee.address, @@ -213,62 +184,39 @@ const fixtureDossier = (input: { target_procedure: null, kind: { available: false, reason: "public API did not classify kind" }, }, - ]), - referenced_strings: bounded([ + ], + referenced_strings: [ { address: "0x3000", value: input.referencedString, source_address: "0x1004", }, - ]), - referenced_names: bounded([ + ], + referenced_names: [ { address: "0x4000", value: "_rea_c_global", source_address: "0x1008", }, - ]), - basic_blocks: bounded([ + ], + basic_blocks: [ { start: input.address, successors: [input.successor] }, { start: input.successor, successors: [] }, - ]), + ], }); -const bounded = (items: readonly unknown[]) => ({ - items, - total: items.length, - returned: items.length, - truncated: false, - next_offset: null, -}); - -const emptyCollection = () => bounded([]); - const validDossier = () => { - const collection = { - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }; return { procedure: { address: "0x1000", name: "main" }, - pseudocode: { text: "return 0;", returned_chars: 9, total_chars: 9 }, - assembly: collection, - comments: collection, - callers: collection, - callees: collection, - incoming_references: collection, - outgoing_references: collection, - referenced_strings: collection, - referenced_names: collection, - basic_blocks: { - ...collection, - items: [{ successors: [] }], - total: 1, - returned: 1, - }, - instruction_scan: { scanned: 1, truncated: false }, + pseudocode: "return 0;", + assembly: [], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [{ successors: [] }], }; }; diff --git a/tests/conformance/providers/hopper/realHopperExhaustiveSearch.test.ts b/tests/conformance/providers/hopper/realHopperExhaustiveSearch.test.ts new file mode 100644 index 0000000000..2b8d409362 --- /dev/null +++ b/tests/conformance/providers/hopper/realHopperExhaustiveSearch.test.ts @@ -0,0 +1,73 @@ +import { describe, expect, it } from "vitest"; + +import { openAndVerifyLargeFixture } from "../../../../scripts/lib/real-hopper-exhaustive-search.mjs"; + +const normalize = (value: unknown): unknown => value; + +describe("real Hopper complete inline search", () => { + it("verifies every procedure and string from one result per search", async () => { + const client = fixtureClient(205); + await expect( + openAndVerifyLargeFixture({ + client, + options: {}, + normalizedResult: normalize, + path: "/fixture", + expectedCount: 205, + symbolPrefix: "_rea_fixture_", + stringPrefix: "REA_FIXTURE_", + }), + ).resolves.toEqual({ + procedures: { count: 205, calls: 1 }, + strings: { count: 205, calls: 1 }, + }); + expect(client.calls).toEqual([ + "open_binary", + "search_procedures", + "search_strings", + ]); + }); + + it.each(["duplicate", "wrong-count", "missing"] as const)( + "rejects %s positive evidence", + async (fault) => { + await expect( + openAndVerifyLargeFixture({ + client: fixtureClient(205, fault), + options: {}, + normalizedResult: normalize, + path: "/fixture", + expectedCount: 205, + symbolPrefix: "_rea_fixture_", + stringPrefix: "REA_FIXTURE_", + }), + ).rejects.toThrow(); + }, + ); +}); + +const fixtureClient = ( + count: number, + fault?: "duplicate" | "wrong-count" | "missing", +) => { + const calls: string[] = []; + return { + calls, + callTool: async (request: unknown) => { + const parsed = request as { name: string }; + calls.push(parsed.name); + if (parsed.name === "open_binary") return { isError: false }; + const procedures = parsed.name === "search_procedures"; + const resultCount = fault === "wrong-count" ? count - 1 : count; + const items = Array.from({ length: resultCount }, (_, index) => { + const duplicateIndex = fault === "duplicate" && index === 1 ? 0 : index; + return { + address: `0x${(0x1000 + index).toString(16)}`, + value: `${procedures ? "_rea_fixture_" : "REA_FIXTURE_"}${String(duplicateIndex).padStart(4, "0")}`, + }; + }); + if (fault === "missing") items.pop(); + return items; + }, + }; +}; diff --git a/tests/conformance/providers/hopper/realHopperFixture.test.ts b/tests/conformance/providers/hopper/realHopperFixture.test.ts index 56a0ec6d17..a21a99b0c1 100644 --- a/tests/conformance/providers/hopper/realHopperFixture.test.ts +++ b/tests/conformance/providers/hopper/realHopperFixture.test.ts @@ -22,9 +22,9 @@ describe("real Hopper fixture binding", () => { secondary: { path: join(root ?? "", "version-v2") }, large: { path: join(root ?? "", "large") }, largeOracle: { - symbolPrefix: "_rea_page_", + symbolPrefix: "_rea_inventory_", symbolCount: 1_205, - stringPrefix: "REA_PAGE_", + stringPrefix: "REA_INVENTORY_", stringCount: 1_205, }, oracle: { @@ -120,9 +120,9 @@ const fixtureManifest = async (): Promise => { artifact: "large", artifactSha256: digest(Buffer.from("large")), expectations: { - symbolPrefix: "_rea_page_", + symbolPrefix: "_rea_inventory_", symbolCount: 1_205, - stringPrefix: "REA_PAGE_", + stringPrefix: "REA_INVENTORY_", stringCount: 1_205, }, }, diff --git a/tests/conformance/providers/hopper/realHopperPagination.test.ts b/tests/conformance/providers/hopper/realHopperPagination.test.ts deleted file mode 100644 index 625609d5ea..0000000000 --- a/tests/conformance/providers/hopper/realHopperPagination.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { verifyLargeFixturePagination } from "../../../../scripts/lib/real-hopper-pagination.mjs"; - -const normalize = (value: unknown): unknown => value; - -describe("real Hopper large-fixture pagination", () => { - it("proves every procedure and string across exact search pages", async () => { - await expect( - verifyLargeFixturePagination({ - client: fixtureClient(205), - options: {}, - normalizedResult: normalize, - expectedCount: 205, - symbolPrefix: "_rea_page_", - stringPrefix: "REA_PAGE_", - }), - ).resolves.toEqual({ - procedures: { count: 205, pages: 3 }, - strings: { count: 205, pages: 3 }, - }); - }); - - it.each(["truncated", "duplicate", "wrong-total"] as const)( - "rejects %s positive evidence", - async (fault) => { - await expect( - verifyLargeFixturePagination({ - client: fixtureClient(205, fault), - options: {}, - normalizedResult: normalize, - expectedCount: 205, - symbolPrefix: "_rea_page_", - stringPrefix: "REA_PAGE_", - }), - ).rejects.toThrow(); - }, - ); -}); - -const fixtureClient = ( - count: number, - fault?: "truncated" | "duplicate" | "wrong-total", -) => ({ - callTool: async (request: unknown) => { - const parsed = request as { - name: string; - arguments: { offset: number; limit: number }; - }; - const { offset, limit } = parsed.arguments; - const returned = Math.min(limit, count - offset); - const procedure = parsed.name === "search_procedures"; - const items = Array.from({ length: returned }, (_, pageIndex) => { - const index = offset + pageIndex; - const evidenceIndex = fault === "duplicate" && index === 1 ? 0 : index; - return { - address: `0x${(0x1000 + index).toString(16)}`, - value: `${procedure ? "_rea_page_" : "REA_PAGE_"}${String(evidenceIndex).padStart(4, "0")}`, - value_truncated: fault === "truncated" && index === 0, - }; - }); - const next = offset + returned < count ? offset + returned : null; - return { - items, - offset, - limit, - total: fault === "wrong-total" ? count + 1 : count, - next_offset: next, - has_more: next !== null, - }; - }, -}); diff --git a/tests/conformance/providers/hopper/realHopperSemantic.test.ts b/tests/conformance/providers/hopper/realHopperSemantic.test.ts index 394ef03ceb..73a6f57ccf 100644 --- a/tests/conformance/providers/hopper/realHopperSemantic.test.ts +++ b/tests/conformance/providers/hopper/realHopperSemantic.test.ts @@ -27,7 +27,7 @@ describe("real Hopper semantic fixture resolution", () => { expect(requests).toEqual([ { name: "analyze_function", - arguments: { procedure: "0x1000", include_assembly: true }, + arguments: { procedure: "0x1000" }, }, ]); }); @@ -57,7 +57,6 @@ describe("real Hopper semantic fixture resolution", () => { { address: "0x1000", value: "_rea_entry", - value_truncated: false, }, ]), {}, @@ -70,21 +69,14 @@ describe("real Hopper semantic fixture resolution", () => { it.each([ ["empty", []], - [ - "truncated", - [{ address: "0x1000", value: "rea_entry", value_truncated: true }], - ], [ "duplicate", [ - { address: "0x1000", value: "rea_entry", value_truncated: false }, - { address: "0x2000", value: "_rea_entry", value_truncated: false }, + { address: "0x1000", value: "rea_entry" }, + { address: "0x2000", value: "_rea_entry" }, ], ], - [ - "wrong name", - [{ address: "0x1000", value: "rea_other", value_truncated: false }], - ], + ["wrong name", [{ address: "0x1000", value: "rea_other" }]], ])("rejects %s search evidence", async (_label, items) => { await expect( resolveFixtureProcedure( @@ -98,7 +90,7 @@ describe("real Hopper semantic fixture resolution", () => { }); const clientWithItems = (items: readonly unknown[]) => ({ - callTool: async () => ({ items }), + callTool: async () => items, }); const clientReturning = (value: unknown) => ({ diff --git a/tests/conformance/providers/managed/managedNativeVerification.test.ts b/tests/conformance/providers/managed/managedNativeVerification.test.ts index 7666bfc4f8..7cc34d3f65 100644 --- a/tests/conformance/providers/managed/managedNativeVerification.test.ts +++ b/tests/conformance/providers/managed/managedNativeVerification.test.ts @@ -64,7 +64,6 @@ describe("managed/native boundary verification", () => { const result = verifyManagedNativeBoundaries(exampleInput()); expect(result).toMatchObject({ - schema_version: 1, algorithm: { name: "rea-managed-native-verification", token_to_address_mapping: "not-inferred", @@ -174,20 +173,18 @@ describe("managed/native boundary verification", () => { }); }); - it("reports omitted native candidates when candidate limits truncate matches", () => { + it("retains every observed native candidate", () => { const result = verifyManagedNativeBoundaries({ ...exampleInput(), native_observations: [ nativeEvidenceWithExports(["open_native", "_open_native"]), ], - limits: { max_native_observations: 20, max_candidates_per_import: 1 }, }); expect(result.coverage).toMatchObject({ - status: "truncated", - omitted_candidates: 1, + status: "complete-within-inputs", }); - expect(result.pinvoke_imports[0]?.candidates).toHaveLength(1); + expect(result.pinvoke_imports[0]?.candidates).toHaveLength(2); }); it("wraps verification in derived workflow Evidence", () => { diff --git a/tests/fixtures/binarySession.ts b/tests/fixtures/binarySession.ts index e38c272f86..0e1c04c54b 100644 --- a/tests/fixtures/binarySession.ts +++ b/tests/fixtures/binarySession.ts @@ -69,7 +69,7 @@ export const createCacheProvider = ( resolveAnalysisProfile: () => Promise.resolve( resultOk({ - profile: createAnalysisProfile(identity, 1, { fixture: true }), + profile: createAnalysisProfile(identity, { fixture: true }), compatibility: {}, }), ), @@ -136,8 +136,6 @@ const cacheCapability = ( ): CapabilityDescriptor => ({ provider, operation, - inputContractVersion: 1, - outputContractVersion: 1, available: true, reason: null, pagination: "none", diff --git a/tests/fixtures/bridgeRegexProbe.py b/tests/fixtures/bridgeSearchProbe.py similarity index 83% rename from tests/fixtures/bridgeRegexProbe.py rename to tests/fixtures/bridgeSearchProbe.py index b566e7f567..9f1503b71f 100644 --- a/tests/fixtures/bridgeRegexProbe.py +++ b/tests/fixtures/bridgeSearchProbe.py @@ -16,20 +16,16 @@ def _probe(namespace, payload): action = payload["action"] try: if action == "match": - parsed = namespace["sre_parse"].parse(payload["pattern"]) - paths, steps = namespace["_validate_regex_node"](parsed) flags = ( 0 if payload.get("case_sensitive", False) else namespace["re"].IGNORECASE ) expression = namespace["re"].compile(payload["pattern"], flags) - matcher = namespace["_bounded_regex_matcher"](expression, paths, steps) - matched = matcher(payload["value"]) + matched = expression.search(payload["value"]) is not None return { "action": action, "ok": True, - "backtracking_paths": paths, "matched": matched, } if action == "search": @@ -38,7 +34,7 @@ def _probe(namespace, payload): return { "action": action, "ok": True, - "result": namespace["_search_page"]( + "result": namespace["_search_results"]( object(), "string", payload["params"] ), } diff --git a/tests/fixtures/fakeCdpBrowserTargets.ts b/tests/fixtures/fakeCdpBrowserTargets.ts index f4cedb4ded..e9725a572a 100644 --- a/tests/fixtures/fakeCdpBrowserTargets.ts +++ b/tests/fixtures/fakeCdpBrowserTargets.ts @@ -46,6 +46,14 @@ export const targets = ( }, ] : []), + ...Array.from({ length: options.additionalPageCount ?? 0 }, (_, index) => ({ + id: `allowed-page-${String(index).padStart(4, "0")}`, + type: "page", + title: `Additional application page ${String(index)}`, + url: `http://127.0.0.1:${String(port)}/additional-${String(index)}`, + attached: false, + webSocketDebuggerUrl: `ws://localhost:${String(port)}/devtools/page/allowed-page`, + })), { id: "unsupported-page", type: "page", @@ -100,6 +108,17 @@ export const targets = ( webSocketDebuggerUrl: `ws://localhost:${String(port)}/devtools/page/electron-page`, }), }, + ...Array.from( + { length: options.additionalElectronPageCount ?? 0 }, + (_, index) => ({ + id: `electron-page-${String(index).padStart(4, "0")}`, + type: "page", + title: `Additional Electron page ${String(index)}`, + url: options.electronFileUrl, + attached: false, + webSocketDebuggerUrl: `ws://localhost:${String(port)}/devtools/page/electron-page`, + }), + ), { id: "electron-worker", type: "worker", diff --git a/tests/fixtures/fakeCdpBrowserTypes.ts b/tests/fixtures/fakeCdpBrowserTypes.ts index 0924b40739..da1343bab7 100644 --- a/tests/fixtures/fakeCdpBrowserTypes.ts +++ b/tests/fixtures/fakeCdpBrowserTypes.ts @@ -27,6 +27,8 @@ export interface FakeOptions { readonly omitTargetWebSocket?: boolean; readonly additionalPageWithWebSocket?: boolean; readonly additionalPageWithoutWebSocket?: boolean; + readonly additionalPageCount?: number; + readonly additionalElectronPageCount?: number; readonly invalidAttachedSession?: boolean; readonly malformedMessageOnMethod?: string; readonly malformedEventOnMethod?: string; diff --git a/tests/fixtures/fakeGhidra.mjs b/tests/fixtures/fakeGhidra.mjs index 98cf22d7da..a63002d5a3 100644 --- a/tests/fixtures/fakeGhidra.mjs +++ b/tests/fixtures/fakeGhidra.mjs @@ -226,39 +226,29 @@ const inventoryResultFor = (method) => { case "list_documents": return ["fixture"]; case "list_names": - return page(method, [nameItem()]); + return [nameItem()]; case "list_procedures": - return page(method, [procedureItem()]); + return [procedureItem()]; case "list_segments": return [segmentItem()]; case "list_strings": - return page(method, [stringItem("0x2000", "fixture value")]); + return [stringItem("0x2000", "fixture value")]; case "procedure_address": return "0x1000"; case "resolve_containing_procedure": return containingProcedureResult(); case "search_procedures": - return page(method, [procedureSearchItem()]); + return [procedureSearchItem()]; case "search_strings": - return page(method, [stringSearchItem()]); + return [stringSearchItem()]; default: return undefined; } }; -const page = (method, items) => ({ - items, - offset: 0, - limit: method.startsWith("search_") ? 100 : 500, - total: items.length, - next_offset: null, - has_more: false, -}); - const nameItem = () => ({ address: "0x1000", value: "fixture_main", - value_truncated: false, symbol: { primary: true, dynamic: false, @@ -271,7 +261,6 @@ const nameItem = () => ({ const procedureItem = () => ({ address: "0x1000", value: "fixture_main", - value_truncated: false, procedure: { external: false, thunk: false, thunk_target: null }, }); @@ -294,7 +283,6 @@ const segmentItem = () => ({ const stringItem = (address, value) => ({ address, value, - value_truncated: false, string: { encoding: "UTF-8", termination: "present_or_not_required", @@ -320,11 +308,9 @@ const containingProcedureResult = () => ({ const procedureSearchItem = () => ({ address: "0x1000", value: "fixture_main", - value_truncated: false, }); const stringSearchItem = () => ({ address: "0x2000", value: "fixture value", - value_truncated: false, }); diff --git a/tests/fixtures/fakeHopper.mjs b/tests/fixtures/fakeHopper.mjs index 7b2fd7b1b8..3fc163c3af 100644 --- a/tests/fixtures/fakeHopper.mjs +++ b/tests/fixtures/fakeHopper.mjs @@ -69,33 +69,12 @@ const enhancedFixtureResult = (method) => { case "list_documents": return ["fixture"]; case "list_procedures": - return { - items: [{ address: "0x1000", value: "fixture" }], - offset: 0, - limit: 500, - total: 1, - next_offset: null, - has_more: false, - }; + return [{ address: "0x1000", value: "fixture" }]; case "list_strings": - return { - items: [{ address: "0x1000", value: "fixture" }], - offset: 0, - limit: 500, - total: 1, - next_offset: null, - has_more: false, - }; + return [{ address: "0x1000", value: "fixture" }]; case "procedure_pseudo_code": return "return 0;"; case "analyze_function": { - const empty = () => ({ - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }); return { procedure: { address: "0x1000", @@ -103,42 +82,21 @@ const enhancedFixtureResult = (method) => { signature: null, locals: [], }, - pseudocode: { - text: "return 0;", - total_chars: 9, - returned_chars: 9, - truncated: false, - next_offset: null, - }, - assembly: { ...empty(), items: ["ret"], total: 1, returned: 1 }, - comments: empty(), - callers: empty(), - callees: empty(), - incoming_references: empty(), - outgoing_references: empty(), - referenced_strings: empty(), - referenced_names: empty(), - basic_blocks: { - ...empty(), - items: [{ start: "0x1000", end: "0x1001", successors: [] }], - total: 1, - returned: 1, - }, - instruction_scan: { scanned: 1, truncated: false }, + pseudocode: "return 0;", + assembly: ["ret"], + comments: [], + callers: [], + callees: [], + incoming_references: [], + outgoing_references: [], + referenced_strings: [], + referenced_names: [], + basic_blocks: [{ start: "0x1000", end: "0x1001", successors: [] }], }; } case "search_strings": case "search_procedures": - return { - items: [ - { address: "0x1000", value: "fixture", value_truncated: false }, - ], - offset: 0, - limit: 100, - total: 1, - next_offset: null, - has_more: false, - }; + return []; case "xrefs": return ["0x1000"]; default: @@ -240,15 +198,7 @@ const server = createServer((socket) => { result: { procedure: { address: "0x1000", name: "fixture" }, direction: request.params.direction ?? "outgoing", - references: { - items: [], - total: 0, - returned: 0, - truncated: false, - next_offset: null, - }, - instructions_scanned: 1, - instruction_scan_truncated: false, + references: [], }, }); } else { diff --git a/tests/fixtures/fakeLauncher.mjs b/tests/fixtures/fakeLauncher.mjs index c9db990c7f..7f2fe34927 100644 --- a/tests/fixtures/fakeLauncher.mjs +++ b/tests/fixtures/fakeLauncher.mjs @@ -2,7 +2,11 @@ import { spawn } from "node:child_process"; import { readFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; -const bootstrapIndex = process.argv.indexOf("--python") + 1; +const bootstrapFlag = ["-Y", "--python"].find((flag) => + process.argv.includes(flag), +); +const bootstrapIndex = + bootstrapFlag === undefined ? 0 : process.argv.indexOf(bootstrapFlag) + 1; const actionIndex = Math.max( process.argv.indexOf("--executable"), process.argv.indexOf("--database"), diff --git a/tests/fixtures/fakeV8Inspector.ts b/tests/fixtures/fakeV8Inspector.ts index 4e0790084b..df47f6ba8c 100644 --- a/tests/fixtures/fakeV8Inspector.ts +++ b/tests/fixtures/fakeV8Inspector.ts @@ -13,6 +13,7 @@ interface FakeV8InspectorOptions { readonly targetType?: "node" | "page"; readonly scriptUrls?: readonly string[]; readonly additionalTargetUrl?: string; + readonly additionalTargetCount?: number; readonly closeOnMethod?: string; } @@ -63,6 +64,16 @@ export const startFakeV8Inspector = async ( port, ), ]), + ...Array.from( + { length: options.additionalTargetCount ?? 0 }, + (_, index) => + target( + `00000000-0000-4000-8000-${String(index + 3).padStart(12, "0")}`, + options.targetUrl, + options.targetType ?? "node", + port, + ), + ), ]), ); return; diff --git a/tests/fixtures/hopperBridgeFacadeProbe.py b/tests/fixtures/hopperBridgeFacadeProbe.py index ce059a066e..4dbae30a8b 100644 --- a/tests/fixtures/hopperBridgeFacadeProbe.py +++ b/tests/fixtures/hopperBridgeFacadeProbe.py @@ -29,14 +29,16 @@ class FakeDocument: class FakeDocumentProvider: document = FakeDocument() + current = FakeDocument() + documents = [document, current] @classmethod def getAllDocuments(cls): - return [cls.document] + return cls.documents @classmethod def getCurrentDocument(cls): - return cls.document + return cls.current def load_bridge(path): @@ -61,14 +63,17 @@ def main(): } bridge["REA_TARGET_PATH"] = "/tmp/rea-hopper-facade-fixture" + bridge["REA_OWNS_PROCESS_LIFETIME"] = False bridge["_configure_hopper_api"](FakeDocumentProvider) + bridge["_bind_session_document"]() current = bridge["_dispatch"]("current_document", {}) current_address = bridge["_dispatch"]("current_address", {}) - selected = bridge["_session_document"]().getDocumentName() + selected = bridge["_session_document"]() is FakeDocumentProvider.current + retained = bridge["_dispatch"]("shutdown", {}) analysis_guard = None try: - bridge["_dispatch"]("list_procedures", {"offset": 0, "limit": 1}) + bridge["_dispatch"]("list_procedures", {}) except Exception as error: analysis_guard = { "type": type(error).__name__, @@ -110,7 +115,8 @@ def main(): "imported_without_hopper": unavailable, "current_document": current, "current_address": current_address, - "session_document": selected, + "session_document_reused": selected, + "shared_document_shutdown": retained, "analysis_guard": analysis_guard, "bridge_messages": bridge_messages, "invalid_id_response": invalid_id_response,