feat(dotnet): add BYO ILSpy oracle diagnostics

This commit is contained in:
N0zoM1z0 2026-07-16 22:51:25 +08:00 committed by N0zoM1z0
parent fb6964a74e
commit aa200ce8ca
71 changed files with 490 additions and 168 deletions

View File

@ -61,7 +61,7 @@ See [docs/architecture.mermaid](docs/architecture.mermaid) for a visual architec
- `npm run verify:hopper`: build and run the real-Hopper verifier with two distinct binaries.
- `npm run verify:ghidra`: build and run the real-Ghidra verifier against `GHIDRA_INSTALL_DIR` and optional `GHIDRA_TARGET_PATH`.
- `npm run verify:browser`: build and run the real Chrome verifier against `REA_BROWSER_EXECUTABLE` or a platform-default Chrome-family executable.
- `npm run verify:managed`: build and run the source-owned managed PE/CLI conformance verifier for artifact triage, member inspection, managed/native boundary declarations, token drift comparison, malformed metadata, non-managed degradation, managed application-graph projection, and manifest-verifier self-test; set `REA_MANAGED_APP_MANIFEST_PATH` to verify an operator-local managed app manifest, including optional graph/trace assertions.
- `npm run verify:managed`: build and run the source-owned managed PE/CLI conformance verifier for artifact triage, member inspection, managed/native boundary declarations, token drift comparison, malformed metadata, non-managed degradation, managed application-graph projection, manifest-verifier self-test, and optional BYO ILSpy oracle checks; set `REA_MANAGED_APP_MANIFEST_PATH` to verify an operator-local managed app manifest, including optional graph/trace assertions, and set `REA_ILSPY_CMD_PATH` to an absolute `ilspycmd` path to run the real ILSpy reconstruction oracle.
- `npm run verify:replay`: build and run the real Linux Bubblewrap/seccomp/cgroup verifier against source-owned replay fixtures; set `REA_REPLAY_INPUT_PATH` to verify an operator-local manifest.
- `npm run verify:package`: pack and test the CLI, setup transaction, skill, and canonical target-free MCP catalog in an isolated environment.
- `npm run docs:generate`: generate API documentation from JSDoc comments into `docs/api/` using TypeDoc.
@ -76,6 +76,7 @@ Pre-commit hooks via Husky run `oxlint` on staged files before every commit. Use
- `REA_ANALYSIS_PROVIDER` (optional, default `auto`): require one deep-analysis provider ID for startup and one-shot commands, or use deterministic automatic selection. A request-level `provider_id`/`--provider` takes precedence.
- `GHIDRA_INSTALL_DIR` (optional): absolute root of an extracted official Ghidra 12.1.2 distribution. The current adapter supports Linux x64 only.
- `JAVA_HOME` (optional): absolute 64-bit full JDK 21 root used by Ghidra. When absent, doctor probes `java`/`javac` from `PATH`.
- `REA_ILSPY_CMD_PATH` (optional): absolute path to a bring-your-own `ilspycmd`; doctor reports its configured version, and `verify:managed` can use it as a real reconstruction oracle without making ILSpy a setup-installed dependency or canonical parser.
- `HOPPER_TARGET_PATH` (optional): absolute initial binary or `.hop` target. Target-free MCP sessions use `open_binary` instead.
- `HOPPER_LAUNCHER_PATH` (optional): override the Hopper executable path (defaults to `/Applications/Hopper Disassembler.app/Contents/MacOS/hopper`).
- `HOPPER_TARGET_KIND` (optional, default `executable`): startup kind for `HOPPER_TARGET_PATH`; dynamic targets are classified from their paths and headers.

View File

@ -349,6 +349,10 @@ REA is already useful for native application, browser, and Electron investigatio
- Reconcile that static graph with existing passive web or Electron Evidence through `reconcile_javascript_runtime` or `rea reconcile-javascript-runtime`. Exact captured bytes outrank caller-declared file/URL mappings; target, frame, script, worker, cache, and asset ambiguity stays explicit, source-map authority stays separate, and a module resident in an observed bundle is never reported as executed. See [JavaScript static/runtime reconciliation](docs/javascript-runtime-reconciliation.md).
- Trace a literal route, string, API, IPC channel, module, or native export through authenticated application Evidence with explicit traversal bounds, then hand exact native artifact digests and requested exports to retained Ghidra or Hopper Evidence without automatic provider switching. Compare application versions using unique-only digest, source-map, structural, and semantic tiers; duplicate, incomplete, and truncated matches stay unknown. See [cross-layer JavaScript application workflows](docs/javascript-application-workflows.md).
- Classify PE/CLI managed artifacts with `inspect_managed_artifact` / `rea inspect-managed-artifact`, inspect bounded metadata members, signatures, method-body CIL hashes, exception regions, call edges, and field-access anchors with `inspect_managed_members` / `rea inspect-managed-members`, inventory declared ModuleRef/ImplMap/PInvoke and non-IL method boundary indicators with `inspect_managed_native_boundaries` / `rea inspect-managed-native-boundaries`, then compare two authenticated member observations with `compare_managed_members` / `rea compare-managed-members`. `verify_managed_native_boundaries` / `rea verify-managed-native-boundaries` checks managed P/Invoke declarations against authenticated native export or function Evidence while keeping verified, inferred, contradicted, and unresolved states distinct. The comparison remaps build-local tokens using unique CIL/signature and structural method-shape tiers, never names alone. `project_managed_application_graph` / `rea project-managed-application-graph` projects authenticated managed artifact/member/native-boundary Evidence into the existing application graph for cross-layer feature tracing. `import_managed_reconstruction` / `rea import-managed-reconstruction` admits user-supplied decompiler C#/IL/pseudocode as analyst inference only after exact artifact SHA-256, MVID, signature, and normalized IL commitments match. Separately, `plan_managed_runtime_correlation` / `rea plan-managed-runtime-correlation` can admit a default-disabled, permission-gated runtime-correlation plan locked to the same build evidence. These paths never load the assembly, resolve CLR dependencies, execute target code, run a decompiler, or translate managed tokens into native addresses; native-body bridge mapping and an actual runtime executor remain future managed-code contracts.
- Configure `REA_ILSPY_CMD_PATH=/absolute/path/to/ilspycmd` only when you want
doctor and `verify:managed` to inspect a bring-your-own ILSpy command as a
real reconstruction oracle. REA does not install ILSpy and does not treat
decompiler text as canonical metadata or CIL observation.
- 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.

View File

@ -1 +1 @@
window.hierarchyData = "eJytmV1v3CgUhv+Lr6nXBvw1d+0o23ZVbaJMq1ysoojYZILqAS9mkh1V+e8V9kyCYxyDszfN2PV7zgMc4HD4FUghVBus/kEFjgHGKEkAxjjCIM1QHgNUpAiBBKIoAkkRwwTgKM5SAHGRQoCjFKUAFjnMr0Eg6V1NS8UEb4PVr0Bb1H852dFgFXzkpD60rD2TUsgABD8Zr4JVDHMQ7GUdrIKyJm1L2z8qsSOM31D9XRsOZOG92tUB6D8NVoFqqw/azof+BQjKe1ZXkvKuQQnS+AlARZYBVBQpwFFUABxBBHCE9D9JBnCU6V95DnAcxQB3bYwTBHCc6l+Z/o8iBhimGcAwKwCGeQYwiiHACEUggwlOrp9AoD0aDf4imoZKz+YaIp/GYhhBgKFGgjACGOrWQayBk7xnSxPLYFxIoUQp6oWDMpDP8HYQWWaB+MqbvVpI8KJ1cV+kFvfne7XcvyGeB9DhZwFYk4bcspqpww9OHgiryW1NF/JM23LBg8iKx0ta17RajGTqXTCQDeM721GxeJxMtQtCYgbqhRQPrKJyQ4/rmyeEXe+CkSELxseKNMp7ZbGpXRDy3ED4JMVjS+X5bUvlA1nQFRMGHEDiaLCbSMXuSKnOGyqXcNj1LhjQXEfPdJfykn7lim4lUwdPDLvea+WPUXbdgaHMAnZJ76jUPxaCDfUu/TPYA09mvrEd8526Y62L+9Q2PH8y7wV1JHVxnplz5St/oK1i2y68roT82TbEexzeMOICVJhz5gf/ycUjv6Rb1irpG6o2tQMCjOAoJ1q2lI+1Lu7jsfulG5pN7YIAoxHCwrzLInYBQOO09JLuhPINxpHUxTnObK0vaet7EhhrXdwn+cj9RhG5LPhelC6uU7Pla8Hv2Ha/aLMaa13cZ2au+bf4xDiRh/OG+nofSV2c52bbe/13IrfUt99HUgfnaDDnL6jcsbZlgl/Sf/dMek/7CQMuIMic+Ze0qcnhoiZ8o4j3fmRTzyN0x3RrZ2xK0dBn9zBJT+4ZV1TekfKFoHkWXYialYfwlZVJjGdTw5QF4iKLdAUhj657xiyaHDDaqndTHu04cPY4uR3nsyT8/TCdFUcUXVgxUK7orc4HuBLycElbsZc6c2z2jlCPhjyctOU9mkWO4+uedlDw2Sh99ryityfzCyhHNtw6DhUpTAfHFlZt6Tey5+X9DMV9t9DfmAoqQ/PRGWGw7Q4NvhuCTk/+iXFCRYqzYynIsid/bJqald0OM4K0LE52wklTbrWh1JYpdIdWB5ShIHz16HDQjQf79ed7VkniFDLb7tMbU0FlaD66hUxXWZ1AmA2ZeQj/kMFRXMDrnqyAI7IvlFQ1bVuXeHkL77Udp0rVIKnu7bgEy4DjOTpePTr4T5E5UiflMTl1ipqm//bmlTa02low2aEud8dpXxyIstRcmtdVcyzEuPTZbf/pzVgVWl45pEVwcEhfV82ZrotJwT1pXstC27t5Hn3pYasLn0pDF0LO7bDkZcm7MYrjPYHVoPdcxCiNAS6ypNtsu0dbsbZmdDZJcaLtLTmuXPrGyH69MBzPd/DMDuhExyVJrm+qMMZF33EY24rwJ/NrwitWETWXrXgxPxv1X4H1dU63N3bwaZHHo4PVhnaJ5VuTxqQdiMLh0/xk0QE4ReA5UUbacPzGt790B+me6m4s3yxc+8JaDVjq2Yuw9frcYetgHVQNdo1omaIuK6OJOxKG4zezg91d+Jrl1OPaurwXJyyEU+99+1FvLbofu8trc5a36qzaOh2WTNy/yAPZlJI16nRf8FmS5n4tuKL/qdC06ouaZsd0vPsxKBufKu7/P/DYttv63l1xD/MdnZusSaP2cr6SYRJapKHt3UxwPj39BjyALlA="
window.hierarchyData = "eJytmV1T5CgUhv9LrplsAuTLO6fLddyaWi17przYsixMsKVMQ5bQul1T/vcpEluJIQbi3rRJzHvOAxwO5PArkEKoNjj6BxUYAoxRkgKMcZSANEN5ClCRIgwSiKIYJEWMIoCjOMsAxEWKAI5SlAFY5LC4BoGkdzUtFRO8DY5+Bdqi/svJlgZHwTEn9b5l7YmUQgYgeGC8Co5imINgJ+vgKChr0ra0/aMSW8L4DdXvteFAFt6rbR2A/tXgKFBt9UXb+dI/AEF5z+pKUt41KMEaX7chywEqikyz6wZADHCE9E+SAxxl+iovAI4jCHAMU4DjBAMcp/oq0/8oIMAwzQGGeaR/coBRjABGKAYZTJLo+hkE2qPR4G+iaaj0bK4h8mkshhECGGokCGOAoW4dxBo4KXq2NLUMxoUUSpSiXjgoA/kMbweR5RaIM97s1EKCN62L+yKzuD/fqeX+DfE8gA4/C8CKNOSW1Uztf3LySFhNbmu6kGfalgsexFY8XtK6ptViJFPvgoFsGD/YlorF42SqXRASM1AvpHhkFZVr+pLfPCHseheMDFswjivSKO/MYlO7IOSFgfBViqeWyvPblspHsqArJgw4gMTRYDWRit2RUp03VC7hsOtdMKCZR090l/KSnnFFN5KpvSeGXe+V+WOUX3dgKLeAXdI7KvXFQrCh3qV/Bmvgwcx3tmW+U3esdXGf2obnT+adUEdSF+eZOVfO+CNtFdt04XUl5EPbEO9x+MCIC1Bhzpmf/IGLJ35JN6xV0jdUbWoHBBih0Z5oWSofa13cx2P3Sxc0m9oFAcYjhIX7LovYBQCNt6WXdCuUbzCOpC7OcW5rfUlb3y+BsdbFfVKM3K8VkcuC703p4jo1W74S/I5tdosWq7HWxX1u7jX/Fl8ZJ3J/3lBf7yOpk3Oz7b3+B5Eb6tvvI6mDczSY8xdUblnbMsEv6b87Jr2n/YQBFxBkzvxL2tRkf1ETvlbEez2yqecRus90a2esS9HQV/cwSQ/uGVdU3pHyjaB5FV2ImpX78J2VSYxXU8MtC8RFFusKQh5f94xZPDlgtFWfpnyx48DZ4+R2nFNJ+OdhOiuOKLqwYqBc0Vu9H+BKyP0lbcVO6p1js3OEejLk4aQt79Escgyve9pBwWet9LfnFb09mF9AObLh1nGoSGE2+Gxh1YZ+Jzte3s9Q3HeJ/sZUUBmat84Ig2V3aPDTEHR68k+MEypSnL+Ugixr8nHT1KzsVpgRpCU52QknTTnVhrLMtlPoPlodUIaC8N2tS21msF6f3rNKEqeQ2XSv3pgKKkPz1i1kusrqBMJsyMxD+IcMjuICXfdkBRqRfaOkqmnbusTLR3jv7ThVqgab6t6OS7AMOF6j492tg/8UmSN1UL5sTp2ipunfvXmnDa22Fkx22JW70744EGWpmZpXVfNSiHHps9v+1ZuxKrQ8ctgWwcFH+qpqTnRdTAruSfNeFtqezfPoQw9bXfhQGroQcm6FJW8p78YojvcEVoPecxGjFAJcZEm32Ha3tmJtzejsJsWJtrfkmLn0iZH9eGE4np/gmR3QiY5LklyfVGHcH9J0Fx+grgivWEXU3G7Fi/nVqH8G1sc53drYwadFDkcfVmvabSw/mjQm7UAUDu/mJ4sOwCkCz4ky0objJ779pTtI91R3Yvlh4doX1mrAUs9ehK3zc4etg3VQNdg2omWKumRGE3ckDMdPZge7O/A1y6kvuXV5L05YCKee+/ajXlp0P3aH1+Ysb9VJtXH6WDJx/yKPZF1K1qjDecGpJM39SnBF/1OhadUXNc3SPpN3F4Oy8aHi/v8Dj2275ffuiHu439F7kxVp1E7OVzJMQos0tD2bCc7n599QEC52"

File diff suppressed because one or more lines are too long

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Failure to establish a filesystem object's canonical authorization identity.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="72339">
<section class="tsd-panel tsd-hierarchy" data-refl="72344">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Typed application failure produced by controlled process capture.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="72545">
<section class="tsd-panel tsd-hierarchy" data-refl="72550">
<h4>Hierarchy (<a href="../hierarchy.html#application/ProcessCaptureError.ProcessCaptureError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Owner-only project policy persistence failure.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="74124">
<section class="tsd-panel tsd-hierarchy" data-refl="74129">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Caller cancellation won before provider-neutral work completed.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4023">
<section class="tsd-panel tsd-hierarchy" data-refl="4024">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.AnalysisCancelledError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Selected provider cannot execute a declared analysis operation.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4009">
<section class="tsd-panel tsd-hierarchy" data-refl="4010">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.AnalysisCapabilityUnavailableError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Base class for expected analysis, provider, and session failures.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="3941">
<section class="tsd-panel tsd-hierarchy" data-refl="3942">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.AnalysisError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Caller input failed provider-neutral application parsing.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="3977">
<section class="tsd-panel tsd-hierarchy" data-refl="3978">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.AnalysisInputError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Provider output failed provider-neutral application parsing.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="3996">
<section class="tsd-panel tsd-hierarchy" data-refl="3997">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.AnalysisOutputError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Provider-neutral invalid analysis input or output at an application boundary.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="3965">
<section class="tsd-panel tsd-hierarchy" data-refl="3966">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.AnalysisProtocolError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Provider-neutral operation exceeded its declared execution deadline.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4033">
<section class="tsd-panel tsd-hierarchy" data-refl="4034">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.AnalysisTimeoutError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Artifact inventory or extraction failed a typed safety boundary.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4101">
<section class="tsd-panel tsd-hierarchy" data-refl="4102">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.ArtifactOperationError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>A supplied target path could not be safely opened as a supported app or binary.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4287">
<section class="tsd-panel tsd-hierarchy" data-refl="4288">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.BinaryTargetError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>A bounded passive browser observation failed at its CDP boundary.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4088">
<section class="tsd-panel tsd-hierarchy" data-refl="4089">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.BrowserObservationError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Runtime configuration could not be parsed safely.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4267">
<section class="tsd-panel tsd-hierarchy" data-refl="4268">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.ConfigurationError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Evidence bundle filesystem access failed within the configured policy.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4165">
<section class="tsd-panel tsd-hierarchy" data-refl="4166">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.EvidenceFileError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Evidence identity, schema, or bundle manifests failed integrity checks.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4125">
<section class="tsd-panel tsd-hierarchy" data-refl="4126">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.EvidenceIntegrityError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>A bounded evidence ledger cannot accept more records or serialized bytes.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4153">
<section class="tsd-panel tsd-hierarchy" data-refl="4154">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.EvidenceLimitError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>A session Evidence reference is missing or has the wrong semantic identity.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4137">
<section class="tsd-panel tsd-hierarchy" data-refl="4138">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.EvidenceReferenceError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.EvidenceIntegrityError.html" class="tsd-signature-type tsd-kind-class">EvidenceIntegrityError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>The caller cancelled a Hopper operation before it completed.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4212">
<section class="tsd-panel tsd-hierarchy" data-refl="4213">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.HopperCancelledError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.HopperError.html" class="tsd-signature-type tsd-kind-class">HopperError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Base class for failures produced specifically by the Hopper provider.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="3953">
<section class="tsd-panel tsd-hierarchy" data-refl="3954">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.HopperError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>The owned Hopper bridge stopped before its client was closed.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4247">
<section class="tsd-panel tsd-hierarchy" data-refl="4248">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.HopperProcessError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.HopperError.html" class="tsd-signature-type tsd-kind-class">HopperError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Hopper returned bytes or JSON that do not satisfy the NDJSON RPC contract.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4220">
<section class="tsd-panel tsd-hierarchy" data-refl="4221">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.HopperProtocolError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.HopperError.html" class="tsd-signature-type tsd-kind-class">HopperError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Hopper's JSON-RPC endpoint returned an expected remote error response.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4233">
<section class="tsd-panel tsd-hierarchy" data-refl="4234">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.HopperRemoteError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.HopperError.html" class="tsd-signature-type tsd-kind-class">HopperError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Hopper or the repository bridge could not be started.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4258">
<section class="tsd-panel tsd-hierarchy" data-refl="4259">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.HopperStartError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.HopperError.html" class="tsd-signature-type tsd-kind-class">HopperError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Hopper did not respond within the configured operation deadline.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4202">
<section class="tsd-panel tsd-hierarchy" data-refl="4203">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.HopperTimeoutError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.HopperError.html" class="tsd-signature-type tsd-kind-class">HopperError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Persistent investigation workspace access or CAS validation failed.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4178">
<section class="tsd-panel tsd-hierarchy" data-refl="4179">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.InvestigationWorkspaceError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>No app or binary session exists for an analysis request.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4279">
<section class="tsd-panel tsd-hierarchy" data-refl="4280">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.NoBinaryOpenError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Exact denied authority used by both CLI and MCP remediation.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4312">
<section class="tsd-panel tsd-hierarchy" data-refl="4313">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.PermissionRequiredError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>A provider adapter failed outside its more precise typed variants.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4073">
<section class="tsd-panel tsd-hierarchy" data-refl="4074">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.ProviderAdapterError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>No configured provider can satisfy a requested operation or target binding.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4057">
<section class="tsd-panel tsd-hierarchy" data-refl="4058">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.ProviderSelectionError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Approved replay commitment no longer matches the immediately rebuilt plan.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4330">
<section class="tsd-panel tsd-hierarchy" data-refl="4331">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.ReplayPlanStaleError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Residual-unknown mutation failed a lifecycle, reference, or CAS invariant.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="4191">
<section class="tsd-panel tsd-hierarchy" data-refl="4192">
<h4>Hierarchy (<a href="../hierarchy.html#domain/errors.UnknownRegistryError">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>A proposed grant exceeds the administrator-owned maximum authority.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="25004">
<section class="tsd-panel tsd-hierarchy" data-refl="25005">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Local launch failure retained as the cause of a provider-neutral error.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="40183">
<section class="tsd-panel tsd-hierarchy" data-refl="40184">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Provider-owned failure with bounded, token-redacted local diagnostics.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="40356">
<section class="tsd-panel tsd-hierarchy" data-refl="40357">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

View File

@ -14,7 +14,7 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Expected operation failure returned by the authenticated Java bridge.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy" data-refl="40436">
<section class="tsd-panel tsd-hierarchy" data-refl="40437">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

File diff suppressed because one or more lines are too long

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">options</span>: <a href="../interfaces/application_Doctor.SystemDoctorHostOptions.html" class="tsd-signature-type tsd-kind-interface">SystemDoctorHostOptions</a><span class="tsd-signature-symbol"> = {}</span></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="../interfaces/application_Doctor.DoctorHost.html" class="tsd-signature-type tsd-kind-interface">DoctorHost</a></h4><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L337">src/application/Doctor.ts:337</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L356">src/application/Doctor.ts:356</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -27,7 +27,7 @@ bypassing REA's path and executable-header checks.</p>
<li><span><span class="tsd-kind-parameter">environment</span>: <span class="tsd-signature-type">Readonly</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="../types/domain_result.Result.html" class="tsd-signature-type tsd-kind-type-alias">Result</a><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/config.AppConfig.html" class="tsd-signature-type tsd-kind-interface">AppConfig</a><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.ConfigurationError.html" class="tsd-signature-type tsd-kind-class">ConfigurationError</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/config.ts#L312">src/config.ts:312</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/config.ts#L318">src/config.ts:318</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -10,88 +10,88 @@
<h1>rea-agents - v2.0.0</h1></div>
<h2>Hierarchy Summary</h2>
<ul class="tsd-full-hierarchy">
<li data-refl="3941" id="domain/errors.AnalysisError"><a href="classes/domain_errors.AnalysisError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisError</a>
<li data-refl="3942" id="domain/errors.AnalysisError"><a href="classes/domain_errors.AnalysisError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisError</a>
<ul>
<li data-refl="3953" id="domain/errors.HopperError"><a href="classes/domain_errors.HopperError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperError</a>
<li data-refl="3954" id="domain/errors.HopperError"><a href="classes/domain_errors.HopperError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperError</a>
<ul>
<li data-refl="4202" id="domain/errors.HopperTimeoutError"><a href="classes/domain_errors.HopperTimeoutError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperTimeoutError</a></li>
<li data-refl="4212" id="domain/errors.HopperCancelledError"><a href="classes/domain_errors.HopperCancelledError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperCancelledError</a></li>
<li data-refl="4220" id="domain/errors.HopperProtocolError"><a href="classes/domain_errors.HopperProtocolError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperProtocolError</a></li>
<li data-refl="4233" id="domain/errors.HopperRemoteError"><a href="classes/domain_errors.HopperRemoteError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperRemoteError</a></li>
<li data-refl="4247" id="domain/errors.HopperProcessError"><a href="classes/domain_errors.HopperProcessError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperProcessError</a></li>
<li data-refl="4258" id="domain/errors.HopperStartError"><a href="classes/domain_errors.HopperStartError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperStartError</a></li></ul></li>
<li data-refl="3965" id="domain/errors.AnalysisProtocolError"><a href="classes/domain_errors.AnalysisProtocolError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisProtocolError</a></li>
<li data-refl="3977" id="domain/errors.AnalysisInputError"><a href="classes/domain_errors.AnalysisInputError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisInputError</a></li>
<li data-refl="3996" id="domain/errors.AnalysisOutputError"><a href="classes/domain_errors.AnalysisOutputError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisOutputError</a></li>
<li data-refl="4009" id="domain/errors.AnalysisCapabilityUnavailableError"><a href="classes/domain_errors.AnalysisCapabilityUnavailableError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisCapabilityUnavailableError</a></li>
<li data-refl="4023" id="domain/errors.AnalysisCancelledError"><a href="classes/domain_errors.AnalysisCancelledError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisCancelledError</a></li>
<li data-refl="4033" id="domain/errors.AnalysisTimeoutError"><a href="classes/domain_errors.AnalysisTimeoutError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisTimeoutError</a></li>
<li data-refl="4057" id="domain/errors.ProviderSelectionError"><a href="classes/domain_errors.ProviderSelectionError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ProviderSelectionError</a></li>
<li data-refl="4073" id="domain/errors.ProviderAdapterError"><a href="classes/domain_errors.ProviderAdapterError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ProviderAdapterError</a></li>
<li data-refl="4088" id="domain/errors.BrowserObservationError"><a href="classes/domain_errors.BrowserObservationError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>BrowserObservationError</a></li>
<li data-refl="4101" id="domain/errors.ArtifactOperationError"><a href="classes/domain_errors.ArtifactOperationError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ArtifactOperationError</a></li>
<li data-refl="4125" id="domain/errors.EvidenceIntegrityError"><a href="classes/domain_errors.EvidenceIntegrityError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceIntegrityError</a>
<li data-refl="4203" id="domain/errors.HopperTimeoutError"><a href="classes/domain_errors.HopperTimeoutError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperTimeoutError</a></li>
<li data-refl="4213" id="domain/errors.HopperCancelledError"><a href="classes/domain_errors.HopperCancelledError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperCancelledError</a></li>
<li data-refl="4221" id="domain/errors.HopperProtocolError"><a href="classes/domain_errors.HopperProtocolError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperProtocolError</a></li>
<li data-refl="4234" id="domain/errors.HopperRemoteError"><a href="classes/domain_errors.HopperRemoteError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperRemoteError</a></li>
<li data-refl="4248" id="domain/errors.HopperProcessError"><a href="classes/domain_errors.HopperProcessError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperProcessError</a></li>
<li data-refl="4259" id="domain/errors.HopperStartError"><a href="classes/domain_errors.HopperStartError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperStartError</a></li></ul></li>
<li data-refl="3966" id="domain/errors.AnalysisProtocolError"><a href="classes/domain_errors.AnalysisProtocolError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisProtocolError</a></li>
<li data-refl="3978" id="domain/errors.AnalysisInputError"><a href="classes/domain_errors.AnalysisInputError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisInputError</a></li>
<li data-refl="3997" id="domain/errors.AnalysisOutputError"><a href="classes/domain_errors.AnalysisOutputError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisOutputError</a></li>
<li data-refl="4010" id="domain/errors.AnalysisCapabilityUnavailableError"><a href="classes/domain_errors.AnalysisCapabilityUnavailableError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisCapabilityUnavailableError</a></li>
<li data-refl="4024" id="domain/errors.AnalysisCancelledError"><a href="classes/domain_errors.AnalysisCancelledError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisCancelledError</a></li>
<li data-refl="4034" id="domain/errors.AnalysisTimeoutError"><a href="classes/domain_errors.AnalysisTimeoutError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AnalysisTimeoutError</a></li>
<li data-refl="4058" id="domain/errors.ProviderSelectionError"><a href="classes/domain_errors.ProviderSelectionError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ProviderSelectionError</a></li>
<li data-refl="4074" id="domain/errors.ProviderAdapterError"><a href="classes/domain_errors.ProviderAdapterError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ProviderAdapterError</a></li>
<li data-refl="4089" id="domain/errors.BrowserObservationError"><a href="classes/domain_errors.BrowserObservationError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>BrowserObservationError</a></li>
<li data-refl="4102" id="domain/errors.ArtifactOperationError"><a href="classes/domain_errors.ArtifactOperationError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ArtifactOperationError</a></li>
<li data-refl="4126" id="domain/errors.EvidenceIntegrityError"><a href="classes/domain_errors.EvidenceIntegrityError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceIntegrityError</a>
<ul>
<li data-refl="4137" id="domain/errors.EvidenceReferenceError"><a href="classes/domain_errors.EvidenceReferenceError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceReferenceError</a></li></ul></li>
<li data-refl="4153" id="domain/errors.EvidenceLimitError"><a href="classes/domain_errors.EvidenceLimitError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceLimitError</a></li>
<li data-refl="4165" id="domain/errors.EvidenceFileError"><a href="classes/domain_errors.EvidenceFileError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceFileError</a></li>
<li data-refl="4178" id="domain/errors.InvestigationWorkspaceError"><a href="classes/domain_errors.InvestigationWorkspaceError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>InvestigationWorkspaceError</a></li>
<li data-refl="4191" id="domain/errors.UnknownRegistryError"><a href="classes/domain_errors.UnknownRegistryError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>UnknownRegistryError</a></li>
<li data-refl="4267" id="domain/errors.ConfigurationError"><a href="classes/domain_errors.ConfigurationError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ConfigurationError</a></li>
<li data-refl="4279" id="domain/errors.NoBinaryOpenError"><a href="classes/domain_errors.NoBinaryOpenError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>NoBinaryOpenError</a></li>
<li data-refl="4287" id="domain/errors.BinaryTargetError"><a href="classes/domain_errors.BinaryTargetError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>BinaryTargetError</a></li>
<li data-refl="4312" id="domain/errors.PermissionRequiredError"><a href="classes/domain_errors.PermissionRequiredError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>PermissionRequiredError</a></li>
<li data-refl="4330" id="domain/errors.ReplayPlanStaleError"><a href="classes/domain_errors.ReplayPlanStaleError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ReplayPlanStaleError</a></li>
<li data-refl="72545" id="application/ProcessCaptureError.ProcessCaptureError"><a href="classes/application_ProcessCaptureError.ProcessCaptureError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ProcessCaptureError</a></li></ul></li></ul>
<li data-refl="4138" id="domain/errors.EvidenceReferenceError"><a href="classes/domain_errors.EvidenceReferenceError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceReferenceError</a></li></ul></li>
<li data-refl="4154" id="domain/errors.EvidenceLimitError"><a href="classes/domain_errors.EvidenceLimitError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceLimitError</a></li>
<li data-refl="4166" id="domain/errors.EvidenceFileError"><a href="classes/domain_errors.EvidenceFileError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>EvidenceFileError</a></li>
<li data-refl="4179" id="domain/errors.InvestigationWorkspaceError"><a href="classes/domain_errors.InvestigationWorkspaceError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>InvestigationWorkspaceError</a></li>
<li data-refl="4192" id="domain/errors.UnknownRegistryError"><a href="classes/domain_errors.UnknownRegistryError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>UnknownRegistryError</a></li>
<li data-refl="4268" id="domain/errors.ConfigurationError"><a href="classes/domain_errors.ConfigurationError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ConfigurationError</a></li>
<li data-refl="4280" id="domain/errors.NoBinaryOpenError"><a href="classes/domain_errors.NoBinaryOpenError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>NoBinaryOpenError</a></li>
<li data-refl="4288" id="domain/errors.BinaryTargetError"><a href="classes/domain_errors.BinaryTargetError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>BinaryTargetError</a></li>
<li data-refl="4313" id="domain/errors.PermissionRequiredError"><a href="classes/domain_errors.PermissionRequiredError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>PermissionRequiredError</a></li>
<li data-refl="4331" id="domain/errors.ReplayPlanStaleError"><a href="classes/domain_errors.ReplayPlanStaleError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ReplayPlanStaleError</a></li>
<li data-refl="72550" id="application/ProcessCaptureError.ProcessCaptureError"><a href="classes/application_ProcessCaptureError.ProcessCaptureError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ProcessCaptureError</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="44355" id="application/AnalysisProvider.AnalysisOperationPort"><a href="interfaces/application_AnalysisProvider.AnalysisOperationPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisOperationPort</a>
<li data-refl="44356" id="application/AnalysisProvider.AnalysisOperationPort"><a href="interfaces/application_AnalysisProvider.AnalysisOperationPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisOperationPort</a>
<ul>
<li data-refl="44361" id="application/AnalysisProvider.AnalysisClient"><a href="interfaces/application_AnalysisProvider.AnalysisClient.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisClient</a></li>
<li data-refl="49751" id="application/BinarySessionPort.BinarySessionPort"><a href="interfaces/application_BinarySessionPort.BinarySessionPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BinarySessionPort</a>
<li data-refl="44362" id="application/AnalysisProvider.AnalysisClient"><a href="interfaces/application_AnalysisProvider.AnalysisClient.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisClient</a></li>
<li data-refl="49752" id="application/BinarySessionPort.BinarySessionPort"><a href="interfaces/application_BinarySessionPort.BinarySessionPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BinarySessionPort</a>
<ul>
<li data-refl="46981" id="application/BinarySession.BinarySession"><a href="classes/application_BinarySession.BinarySession.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>BinarySession</a></li></ul></li></ul></li></ul>
<li data-refl="46982" id="application/BinarySession.BinarySession"><a href="classes/application_BinarySession.BinarySession.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>BinarySession</a></li></ul></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="44404" id="application/AnalysisProvider.AnalysisProvider"><a href="interfaces/application_AnalysisProvider.AnalysisProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisProvider</a>
<li data-refl="44405" id="application/AnalysisProvider.AnalysisProvider"><a href="interfaces/application_AnalysisProvider.AnalysisProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisProvider</a>
<ul>
<li data-refl="55862" id="application/CompositeProvider.CompositeProvider"><a href="classes/application_CompositeProvider.CompositeProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>CompositeProvider</a></li>
<li data-refl="44449" id="application/AnalysisProvider.AnalysisProviderCandidate"><a href="interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisProviderCandidate</a>
<li data-refl="55863" id="application/CompositeProvider.CompositeProvider"><a href="classes/application_CompositeProvider.CompositeProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>CompositeProvider</a></li>
<li data-refl="44450" id="application/AnalysisProvider.AnalysisProviderCandidate"><a href="interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AnalysisProviderCandidate</a>
<ul>
<li data-refl="40220" id="ghidra/GhidraProvider.GhidraProvider"><a href="classes/ghidra_GhidraProvider.GhidraProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>GhidraProvider</a></li>
<li data-refl="39776" id="hopper/HopperProvider.HopperProvider"><a href="classes/hopper_HopperProvider.HopperProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperProvider</a></li></ul></li></ul></li></ul>
<li data-refl="40221" id="ghidra/GhidraProvider.GhidraProvider"><a href="classes/ghidra_GhidraProvider.GhidraProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>GhidraProvider</a></li>
<li data-refl="39777" id="hopper/HopperProvider.HopperProvider"><a href="classes/hopper_HopperProvider.HopperProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperProvider</a></li></ul></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="67381" id="application/JavaScriptArtifactGraphContext.AstEdgeInput"><a href="interfaces/application_JavaScriptArtifactGraphContext.AstEdgeInput.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AstEdgeInput</a>
<li data-refl="67386" id="application/JavaScriptArtifactGraphContext.AstEdgeInput"><a href="interfaces/application_JavaScriptArtifactGraphContext.AstEdgeInput.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>AstEdgeInput</a>
<ul>
<li data-refl="67647" id="application/JavaScriptArtifactGraphContext.InferenceEdgeInput"><a href="interfaces/application_JavaScriptArtifactGraphContext.InferenceEdgeInput.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>InferenceEdgeInput</a></li></ul></li></ul>
<li data-refl="67652" id="application/JavaScriptArtifactGraphContext.InferenceEdgeInput"><a href="interfaces/application_JavaScriptArtifactGraphContext.InferenceEdgeInput.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>InferenceEdgeInput</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="39633" id="hopper/BridgeLauncher.BridgeLauncher"><a href="interfaces/hopper_BridgeLauncher.BridgeLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BridgeLauncher</a>
<li data-refl="39634" id="hopper/BridgeLauncher.BridgeLauncher"><a href="interfaces/hopper_BridgeLauncher.BridgeLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BridgeLauncher</a>
<ul>
<li data-refl="39647" id="hopper/BridgeLauncher.HopperApplicationLauncher"><a href="classes/hopper_BridgeLauncher.HopperApplicationLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperApplicationLauncher</a></li></ul></li></ul>
<li data-refl="39648" id="hopper/BridgeLauncher.HopperApplicationLauncher"><a href="classes/hopper_BridgeLauncher.HopperApplicationLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>HopperApplicationLauncher</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="52300" id="application/BrowserObservationPort.BrowserObservationPort"><a href="interfaces/application_BrowserObservationPort.BrowserObservationPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BrowserObservationPort</a>
<li data-refl="52301" id="application/BrowserObservationPort.BrowserObservationPort"><a href="interfaces/application_BrowserObservationPort.BrowserObservationPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BrowserObservationPort</a>
<ul>
<li data-refl="40761" id="browser/CdpBrowserProvider.CdpBrowserProvider"><a href="classes/browser_CdpBrowserProvider.CdpBrowserProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>CdpBrowserProvider</a></li></ul></li></ul>
<li data-refl="40762" id="browser/CdpBrowserProvider.CdpBrowserProvider"><a href="classes/browser_CdpBrowserProvider.CdpBrowserProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>CdpBrowserProvider</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="59125" id="application/ElectronObservationPort.ElectronObservationPort"><a href="interfaces/application_ElectronObservationPort.ElectronObservationPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>ElectronObservationPort</a>
<li data-refl="59130" id="application/ElectronObservationPort.ElectronObservationPort"><a href="interfaces/application_ElectronObservationPort.ElectronObservationPort.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>ElectronObservationPort</a>
<ul>
<li data-refl="43265" id="browser/CdpElectronProvider.CdpElectronProvider"><a href="classes/browser_CdpElectronProvider.CdpElectronProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>CdpElectronProvider</a></li></ul></li></ul>
<li data-refl="43266" id="browser/CdpElectronProvider.CdpElectronProvider"><a href="classes/browser_CdpElectronProvider.CdpElectronProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>CdpElectronProvider</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="40176" id="ghidra/GhidraLauncher.GhidraLauncher"><a href="interfaces/ghidra_GhidraLauncher.GhidraLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>GhidraLauncher</a>
<li data-refl="40177" id="ghidra/GhidraLauncher.GhidraLauncher"><a href="interfaces/ghidra_GhidraLauncher.GhidraLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>GhidraLauncher</a>
<ul>
<li data-refl="40192" id="ghidra/GhidraLauncher.GhidraHeadlessLauncher"><a href="classes/ghidra_GhidraLauncher.GhidraHeadlessLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>GhidraHeadlessLauncher</a></li></ul></li></ul>
<li data-refl="40193" id="ghidra/GhidraLauncher.GhidraHeadlessLauncher"><a href="classes/ghidra_GhidraLauncher.GhidraHeadlessLauncher.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>GhidraHeadlessLauncher</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="24962" id="domain/permissionPolicy.PermissionScope"><a href="interfaces/domain_permissionPolicy.PermissionScope.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>PermissionScope</a>
<li data-refl="24963" id="domain/permissionPolicy.PermissionScope"><a href="interfaces/domain_permissionPolicy.PermissionScope.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>PermissionScope</a>
<ul>
<li data-refl="24970" id="domain/permissionPolicy.PermissionRequest"><a href="interfaces/domain_permissionPolicy.PermissionRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>PermissionRequest</a></li>
<li data-refl="24980" id="domain/permissionPolicy.PermissionGrant"><a href="interfaces/domain_permissionPolicy.PermissionGrant.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>PermissionGrant</a></li></ul></li></ul>
<li data-refl="24971" id="domain/permissionPolicy.PermissionRequest"><a href="interfaces/domain_permissionPolicy.PermissionRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>PermissionRequest</a></li>
<li data-refl="24981" id="domain/permissionPolicy.PermissionGrant"><a href="interfaces/domain_permissionPolicy.PermissionGrant.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>PermissionGrant</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="40636" id="process/ProviderProcess.ProviderProcessLaunch"><a href="interfaces/process_ProviderProcess.ProviderProcessLaunch.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>ProviderProcessLaunch</a>
<li data-refl="40637" id="process/ProviderProcess.ProviderProcessLaunch"><a href="interfaces/process_ProviderProcess.ProviderProcessLaunch.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>ProviderProcessLaunch</a>
<ul>
<li data-refl="39626" id="hopper/BridgeLauncher.BridgeLaunch"><a href="interfaces/hopper_BridgeLauncher.BridgeLaunch.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BridgeLaunch</a></li>
<li data-refl="40167" id="ghidra/GhidraLauncher.GhidraLaunch"><a href="interfaces/ghidra_GhidraLauncher.GhidraLaunch.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>GhidraLaunch</a></li></ul></li></ul>
<li data-refl="39627" id="hopper/BridgeLauncher.BridgeLaunch"><a href="interfaces/hopper_BridgeLauncher.BridgeLaunch.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>BridgeLaunch</a></li>
<li data-refl="40168" id="ghidra/GhidraLauncher.GhidraLaunch"><a href="interfaces/ghidra_GhidraLauncher.GhidraLaunch.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>GhidraLaunch</a></li></ul></li></ul>
<ul class="tsd-full-hierarchy">
<li data-refl="29828" id="domain/webInventory.WebInventoryResourceInput"><a href="interfaces/domain_webInventory.WebInventoryResourceInput.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>WebInventoryResourceInput</a>
<li data-refl="29829" id="domain/webInventory.WebInventoryResourceInput"><a href="interfaces/domain_webInventory.WebInventoryResourceInput.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>WebInventoryResourceInput</a>
<ul>
<li data-refl="29841" id="domain/webInventory.StableWebResource"><a href="interfaces/domain_webInventory.StableWebResource.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>StableWebResource</a></li></ul></li></ul></div>
<li data-refl="29842" id="domain/webInventory.StableWebResource"><a href="interfaces/domain_webInventory.StableWebResource.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="assets/icons.svg#icon-256"></use></svg>StableWebResource</a></li></ul></li></ul></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Provider session bound to exactly one parsed artifact.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">AnalysisClient</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-call-signature" href="#close-1">close</a><span class="tsd-signature-symbol">()</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-call-signature" href="#execute-1">execute</a><span class="tsd-signature-symbol">(</span><br/>        <span class="tsd-kind-parameter">operation</span><span class="tsd-signature-symbol">:</span> <a href="../types/application_AnalysisProvider.AnalysisOperation.html" class="tsd-signature-type tsd-kind-type-alias">AnalysisOperation</a><span class="tsd-signature-symbol">,</span><br/>        <span class="tsd-kind-parameter">parameters</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Readonly</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <a href="../types/domain_jsonValue.JsonValue.html" class="tsd-signature-type tsd-kind-type-alias">JsonValue</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>        <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">?:</span> <a href="application_AnalysisProvider.ExecutionOptions.html" class="tsd-signature-type tsd-kind-interface">ExecutionOptions</a><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../types/domain_result.Result.html" class="tsd-signature-type tsd-kind-type-alias">Result</a><span class="tsd-signature-symbol">&lt;</span><a href="application_AnalysisProvider.AnalysisExecution.html" class="tsd-signature-type tsd-kind-interface">AnalysisExecution</a><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="44361">
<section class="tsd-panel tsd-hierarchy" data-refl="44362">
<h4>Hierarchy (<a href="../hierarchy.html#application/AnalysisProvider.AnalysisClient">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="application_AnalysisProvider.AnalysisOperationPort.html" class="tsd-signature-type tsd-kind-interface">AnalysisOperationPort</a>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Provider-neutral application capability for one analysis operation.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">AnalysisOperationPort</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-call-signature" href="#execute-1">execute</a><span class="tsd-signature-symbol">(</span><br/>        <span class="tsd-kind-parameter">operation</span><span class="tsd-signature-symbol">:</span> <a href="../types/application_AnalysisProvider.AnalysisOperation.html" class="tsd-signature-type tsd-kind-type-alias">AnalysisOperation</a><span class="tsd-signature-symbol">,</span><br/>        <span class="tsd-kind-parameter">parameters</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Readonly</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <a href="../types/domain_jsonValue.JsonValue.html" class="tsd-signature-type tsd-kind-type-alias">JsonValue</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>        <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">?:</span> <a href="application_AnalysisProvider.ExecutionOptions.html" class="tsd-signature-type tsd-kind-interface">ExecutionOptions</a><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../types/domain_result.Result.html" class="tsd-signature-type tsd-kind-type-alias">Result</a><span class="tsd-signature-symbol">&lt;</span><a href="application_AnalysisProvider.AnalysisExecution.html" class="tsd-signature-type tsd-kind-interface">AnalysisExecution</a><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.AnalysisError.html" class="tsd-signature-type tsd-kind-class">AnalysisError</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="44355">
<section class="tsd-panel tsd-hierarchy" data-refl="44356">
<h4>Hierarchy (<a href="../hierarchy.html#application/AnalysisProvider.AnalysisOperationPort">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">AnalysisOperationPort</span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,7 @@
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">SystemDoctorHostOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#javascriptreplaycheck">javascriptReplayCheck</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="application_Doctor.DoctorCheck.html" class="tsd-signature-type tsd-kind-interface">DoctorCheck</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#providerinspections">providerInspections</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-keyword">readonly</span> <a href="application_Doctor.DoctorProviderInspection.html" class="tsd-signature-type tsd-kind-interface">DoctorProviderInspection</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L329">src/application/Doctor.ts:329</a></li></ul></aside>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L348">src/application/Doctor.ts:348</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
@ -34,12 +34,12 @@
<h3 class="tsd-anchor-link" id="javascriptreplaycheck"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>javascript<wbr/>Replay<wbr/>Check</span><a href="#javascriptreplaycheck" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">javascriptReplayCheck</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="application_Doctor.DoctorCheck.html" class="tsd-signature-type tsd-kind-interface">DoctorCheck</a><span class="tsd-signature-symbol">&gt;</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L333">src/application/Doctor.ts:333</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L352">src/application/Doctor.ts:352</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="providerinspections"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>provider<wbr/>Inspections</span><a href="#providerinspections" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">providerInspections</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-keyword">readonly</span> <a href="application_Doctor.DoctorProviderInspection.html" class="tsd-signature-type tsd-kind-interface">DoctorProviderInspection</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">&gt;</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L330">src/application/Doctor.ts:330</a></li></ul></aside></section></section></details></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/application/Doctor.ts#L349">src/application/Doctor.ts:349</a></li></ul></aside></section></section></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>A provider adapter failed outside its more precise typed variants.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">ProviderAdapterErrorOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#diagnostics">diagnostics</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Readonly</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="4071">
<section class="tsd-panel tsd-hierarchy" data-refl="4072">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">ErrorOptions</span>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Authority issued beneath the administrator ceiling.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">PermissionGrant</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#capability">capability</a><span class="tsd-signature-symbol">:</span> <a href="../types/domain_permissionPolicy.PermissionCapability.html" class="tsd-signature-type tsd-kind-type-alias">PermissionCapability</a><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#environment_names">environment_names</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#executables">executables</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#expires_at">expires_at</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#grant_id">grant_id</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#lifetime">lifetime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;once&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;session&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;project&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;administrator&quot;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#mount">mount</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#network">network</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">PermissionNetwork</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#operation_identity">operation_identity</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#origins">origins</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#roots">roots</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="24980">
<section class="tsd-panel tsd-hierarchy" data-refl="24981">
<h4>Hierarchy (<a href="../hierarchy.html#domain/permissionPolicy.PermissionGrant">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_permissionPolicy.PermissionScope.html" class="tsd-signature-type tsd-kind-interface">PermissionScope</a>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>A request identity associates one-shot grants with exactly one operation.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">PermissionRequest</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#capability">capability</a><span class="tsd-signature-symbol">:</span> <a href="../types/domain_permissionPolicy.PermissionCapability.html" class="tsd-signature-type tsd-kind-type-alias">PermissionCapability</a><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#environment_names">environment_names</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#executables">executables</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#mount">mount</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#network">network</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">PermissionNetwork</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#operation_identity">operation_identity</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#origins">origins</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#roots">roots</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="24970">
<section class="tsd-panel tsd-hierarchy" data-refl="24971">
<h4>Hierarchy (<a href="../hierarchy.html#domain/permissionPolicy.PermissionRequest">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_permissionPolicy.PermissionScope.html" class="tsd-signature-type tsd-kind-interface">PermissionScope</a>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Exact normalized scope requested by one local operation.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">PermissionScope</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#capability">capability</a><span class="tsd-signature-symbol">:</span> <a href="../types/domain_permissionPolicy.PermissionCapability.html" class="tsd-signature-type tsd-kind-type-alias">PermissionCapability</a><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#environment_names">environment_names</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#executables">executables</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#mount">mount</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#network">network</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">PermissionNetwork</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#origins">origins</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#roots">roots</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="24962">
<section class="tsd-panel tsd-hierarchy" data-refl="24963">
<h4>Hierarchy (<a href="../hierarchy.html#domain/permissionPolicy.PermissionScope">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">PermissionScope</span>

View File

@ -12,7 +12,7 @@
<li><a href="" aria-current="page">StableWebResource</a></li></ul>
<h1>Interface StableWebResource</h1></div>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">StableWebResource</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#content_size">content_size</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#mime_type">mime_type</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#origin">origin</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#resource_key">resource_key</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#type">type</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#url">url</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="29841">
<section class="tsd-panel tsd-hierarchy" data-refl="29842">
<h4>Hierarchy (<a href="../hierarchy.html#domain/webInventory.StableWebResource">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="domain_webInventory.WebInventoryResourceInput.html" class="tsd-signature-type tsd-kind-interface">WebInventoryResourceInput</a>

View File

@ -12,7 +12,7 @@
<li><a href="" aria-current="page">WebInventoryResourceInput</a></li></ul>
<h1>Interface WebInventoryResourceInput</h1></div>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">WebInventoryResourceInput</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#content_size">content_size</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#mime_type">mime_type</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#origin">origin</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#type">type</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#url">url</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="29828">
<section class="tsd-panel tsd-hierarchy" data-refl="29829">
<h4>Hierarchy (<a href="../hierarchy.html#domain/webInventory.WebInventoryResourceInput">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">WebInventoryResourceInput</span>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Process plus private log coordinates returned by a Ghidra launcher.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">GhidraLaunch</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#cleanup">cleanup</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../types/process_ProcessOwnership.ProcessCleanupResult.html" class="tsd-signature-type tsd-kind-type-alias">ProcessCleanupResult</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#ghidralogpath">ghidraLogPath</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#ownsprocesslifetime">ownsProcessLifetime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#process">process</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">ChildProcess</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#projectroot">projectRoot</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#scriptlogpath">scriptLogPath</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="40167">
<section class="tsd-panel tsd-hierarchy" data-refl="40168">
<h4>Hierarchy (<a href="../hierarchy.html#ghidra/GhidraLauncher.GhidraLaunch">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="process_ProviderProcess.ProviderProcessLaunch.html" class="tsd-signature-type tsd-kind-interface">ProviderProcessLaunch</a>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Additional structured context for a Ghidra session failure.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">GhidraSessionErrorOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#remotecode">remoteCode</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#timeoutms">timeoutMs</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="40353">
<section class="tsd-panel tsd-hierarchy" data-refl="40354">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">ErrorOptions</span>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Process handle returned by a bridge launcher.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">BridgeLaunch</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#cleanup">cleanup</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../types/process_ProcessOwnership.ProcessCleanupResult.html" class="tsd-signature-type tsd-kind-type-alias">ProcessCleanupResult</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#ownsprocesslifetime">ownsProcessLifetime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#process">process</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">ChildProcess</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#shutdownbycleanup">shutdownByCleanup</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="39626">
<section class="tsd-panel tsd-hierarchy" data-refl="39627">
<h4>Hierarchy (<a href="../hierarchy.html#hopper/BridgeLauncher.BridgeLaunch">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><a href="process_ProviderProcess.ProviderProcessLaunch.html" class="tsd-signature-type tsd-kind-interface">ProviderProcessLaunch</a>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Process handle returned by a provider-specific launcher.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">ProviderProcessLaunch</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#cleanup">cleanup</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../types/process_ProcessOwnership.ProcessCleanupResult.html" class="tsd-signature-type tsd-kind-type-alias">ProcessCleanupResult</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#ownsprocesslifetime">ownsProcessLifetime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#process">process</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">ChildProcess</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
<section class="tsd-panel tsd-hierarchy" data-refl="40636">
<section class="tsd-panel tsd-hierarchy" data-refl="40637">
<h4>Hierarchy (<a href="../hierarchy.html#process/ProviderProcess.ProviderProcessLaunch">View Summary</a>)</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">ProviderProcessLaunch</span>

View File

@ -206,7 +206,10 @@ oracles but has no runtime dependency on them.
- `System.Reflection.Metadata` is the primary independent metadata/CIL oracle.
- `ICSharpCode.Decompiler` and `ilspycmd` are reconstruction and differential
oracles. An admitted BYO reconstruction operation records its exact version
and remains non-canonical.
and remains non-canonical. When `REA_ILSPY_CMD_PATH` points to an absolute
runnable `ilspycmd`, `verify:managed` runs a source-owned real ILSpy oracle
and imports its C# output as reconstruction inference against exact static
member Evidence.
- dnlib and Mono.Cecil may increase differential coverage. Their mutation APIs
are not exposed or included in the production parsing boundary.
- The package contains no .NET runtime, SDK, ILSpy installation, proprietary
@ -261,6 +264,15 @@ REA_MANAGED_APP_MANIFEST_PATH=/absolute/managed-app-manifest.json npm run verify
```
`verify:managed` always runs a source-owned manifest-verifier self-test first.
If `REA_ILSPY_CMD_PATH` is set to an absolute `ilspycmd` path, it also runs a
source-owned ILSpy oracle: version discovery, class listing, bounded C# output
for a pinned fixture type, and import through `import_managed_reconstruction`.
The verifier prints only command/version, executable and output digests,
Evidence IDs, method locks, and compact fixture identity; it does not print
decompiled C# text. A failing ILSpy oracle fails the verifier because it is an
explicit real-tool claim, but leaving `REA_ILSPY_CMD_PATH` unset keeps the
oracle disabled.
When `REA_MANAGED_APP_MANIFEST_PATH` is set, the manifest's target path may be
absolute or relative to the manifest file. A compact manifest contains:
@ -369,8 +381,9 @@ The managed-code track advances as reviewable pull requests:
inventory and native export/function Evidence matching shipped; native-body
bridge mapping remains planned);
7. source-built managed conformance and package/CLI verification (source-owned
PE/CLI corpus shipped through `npm run verify:managed`; pinned external
ILSpy/dnSpy/Windows checks remain planned); and
PE/CLI corpus shipped through `npm run verify:managed`; optional BYO
`ilspycmd` real-tool oracle shipped through `REA_ILSPY_CMD_PATH`; dnSpy and
pinned Windows checks remain planned); and
8. separately authorized runtime-correlation admission planning (shipped; no
runtime execution);
9. managed static Evidence projection into the application graph (shipped).

View File

@ -1,8 +1,11 @@
import { createHash } from "node:crypto";
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
import { execFile } from "node:child_process";
import { constants } from "node:fs";
import { access, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { basename, dirname, isAbsolute, join, resolve } from "node:path";
import assert from "node:assert/strict";
import { promisify } from "node:util";
import { parseBinaryTarget } from "../dist/domain/binaryTarget.js";
import { inspectManagedArtifactBytes } from "../dist/dotnet/ManagedArtifactInspector.js";
@ -106,6 +109,7 @@ const defaultIlBody = Buffer.from([
]);
const workspace = await mkdtemp(join(tmpdir(), "rea-managed-conformance-"));
const execFileAsync = promisify(execFile);
try {
const modern = await fixture("modern-anycpu.exe", {
@ -497,10 +501,14 @@ try {
const manifestSelfTest = await runManagedAppManifestSelfTest();
const operatorManifest = await runOptionalManagedAppManifest();
const ilspyOracle = await runOptionalIlspyOracle();
process.stdout.write(
`${JSON.stringify({
verified: 12 + (operatorManifest === null ? 0 : 1),
verified:
12 +
(operatorManifest === null ? 0 : 1) +
(ilspyOracle === null ? 0 : 1),
managedSurfaces: [
"inspect_managed_artifact",
"inspect_managed_members",
@ -524,12 +532,17 @@ try {
"not-managed",
"malformed-metadata",
"operator-local-managed-manifest",
...(ilspyOracle === null ? [] : ["ilspy-reconstruction-oracle"]),
],
managedAppManifest: {
env: "REA_MANAGED_APP_MANIFEST_PATH",
selfTest: manifestSelfTest,
operator: operatorManifest ?? { configured: false },
},
ilspyOracle: ilspyOracle ?? {
env: "REA_ILSPY_CMD_PATH",
configured: false,
},
})}\n`,
);
} finally {
@ -642,6 +655,175 @@ async function runOptionalManagedAppManifest() {
};
}
async function runOptionalIlspyOracle() {
const ilspyPath = process.env.REA_ILSPY_CMD_PATH;
if (ilspyPath === undefined) return null;
ensureIlspy(
ilspyPath.trim().length > 0,
"REA_ILSPY_CMD_PATH is set but empty",
);
ensureIlspy(
isAbsolute(ilspyPath),
"REA_ILSPY_CMD_PATH must be an absolute path",
);
await ensureExecutable(ilspyPath);
const versionOutput = await runIlspy(ilspyPath, ["--version"], 64 * 1024);
const version = ilspyVersion(versionOutput);
const executableSha256 = sha256(await readFile(ilspyPath));
const sample = await fixture("ilspy-oracle.exe", {
methodName: "PinnedSemanticSlice",
});
const artifact = inspectManagedArtifactBytes(
sample.bytes,
sample.target,
inspectionLimits,
);
const members = inspectManagedMembersBytes(
sample.bytes,
sample.target,
memberLimits,
);
const method = members.methods.items[0];
ensureIlspy(method !== undefined, "source-owned fixture has no method");
const listOutput = await runIlspy(
ilspyPath,
["--disable-updatecheck", "-l", "c", sample.path],
256 * 1024,
);
ensureIlspy(
listOutput.includes("Class Fixture.Program"),
"ilspycmd class listing did not include Fixture.Program",
);
const csharp = await runIlspy(
ilspyPath,
["--disable-updatecheck", "--type", "Fixture.Program", sample.path],
256 * 1024,
);
ensureIlspy(
csharp.includes("PinnedSemanticSlice"),
"ilspycmd C# output did not include the pinned method name",
);
ensureIlspy(
csharp.length <= 65_536,
"ilspycmd C# output exceeded the managed reconstruction import bound",
);
const memberEvidence = createEvidence(
sample.target,
MANAGED_STATIC_PROVIDER,
{
operation: "inspect_managed_members",
parameters: memberLimits,
result: members,
rawResult: null,
limitations: members.limitations,
locations: [{ kind: "artifact-path", path: sample.target.path }],
},
);
const reconstructionImport = importManagedReconstructionEvidence({
static_members: memberEvidence,
decompiler: {
name: "ilspycmd",
version,
family: "ilspy",
executable_sha256: executableSha256,
options: ["--disable-updatecheck", "--type", "Fixture.Program"],
},
methods: [
{
token: method.token,
signature_sha256: method.signature.raw_sha256,
normalized_il_sha256: method.body.normalized_il_sha256,
reconstruction: {
kind: "decompiled-csharp",
language: "csharp",
text: csharp,
},
},
],
notes: [
"source-owned real ilspycmd oracle; output is imported as reconstruction inference",
],
});
ensureIlspy(reconstructionImport.ok, "managed reconstruction import failed");
const imported = reconstructionImport.value.normalized_result;
ensureIlspy(
imported.summary.decompiled_csharp_methods === 1,
"managed reconstruction import did not record one decompiled C# method",
);
return {
env: "REA_ILSPY_CMD_PATH",
configured: true,
version,
executable_sha256: executableSha256,
fixture: {
file_name: basename(sample.path),
sha256: sample.target.sha256,
mvid: artifact.module?.mvid ?? null,
assembly_name: artifact.assembly?.name ?? null,
method: {
token: method.token,
declaring_type: method.declaring_type,
name: method.name,
signature_sha256: method.signature.raw_sha256,
il_size: method.body.il_size,
normalized_il_sha256: method.body.normalized_il_sha256,
},
},
output: {
class_listing_sha256: sha256(Buffer.from(listOutput)),
decompiled_csharp_sha256: sha256(Buffer.from(csharp)),
decompiled_csharp_bytes: Buffer.byteLength(csharp),
imported_evidence_id: reconstructionImport.value.evidence_id,
reconstruction_id: imported.reconstruction_id,
canonical_observation:
imported.methods[0]?.validation.canonical_observation ?? null,
confidence_floor:
imported.methods[0]?.validation.confidence_floor ?? null,
},
};
}
async function ensureExecutable(path) {
try {
await access(path, constants.X_OK);
} catch {
throw new Error(`managed ILSpy oracle failed: ${path} is not executable`);
}
}
async function runIlspy(path, args, maxBuffer) {
try {
const { stdout } = await execFileAsync(path, args, {
timeout: 30_000,
maxBuffer,
env: {
...process.env,
DOTNET_CLI_TELEMETRY_OPTOUT: "1",
},
});
return stdout;
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
throw new Error(`managed ILSpy oracle failed: ${message}`);
}
}
function ilspyVersion(output) {
const version = output
.split(/\r?\n/u)
.map((line) => line.trim())
.find((line) => line.startsWith("ilspycmd:"));
ensureIlspy(
version !== undefined,
"ilspycmd --version did not identify ilspycmd",
);
return version;
}
function ensureIlspy(condition, message) {
if (!condition) throw new Error(`managed ILSpy oracle failed: ${message}`);
}
async function verifyManagedAppManifest(rawManifest, manifestPath) {
const manifest = parseManagedAppManifest(rawManifest);
const targetPath = isAbsolute(manifest.target.path)

View File

@ -66,6 +66,7 @@ export interface DoctorHost {
readonly platform: NodeJS.Platform;
readonly nodeVersion: string;
readonly configuredHopperPath?: string;
readonly configuredIlspyCmdPath?: string;
macosVersion(): Promise<string | undefined>;
linuxDistribution(): Promise<LinuxDistribution | undefined>;
validTarget(path: string): Promise<boolean>;
@ -80,6 +81,7 @@ export interface DoctorHost {
installedSkillIdentity?(): Promise<InstalledSkillIdentity | undefined>;
clientRegistrations?(): Promise<readonly ClientRegistrationStatus[]>;
javascriptReplayCheck?(): Promise<DoctorCheck>;
ilspyCmdVersion?(path: string): Promise<string | undefined>;
}
/** Parsed identity committed by an installed REA skill. */
@ -205,6 +207,23 @@ export const runDoctor = async (
const providerInspections = await inspectDoctorProviders(host, checks);
const javascriptReplayCheck = await host.javascriptReplayCheck?.();
if (javascriptReplayCheck !== undefined) checks.push(javascriptReplayCheck);
if (host.configuredIlspyCmdPath !== undefined) {
const version = await host.ilspyCmdVersion?.(host.configuredIlspyCmdPath);
checks.push(
check(
"ilspycmd",
version !== undefined,
version === undefined
? host.configuredIlspyCmdPath
: `${host.configuredIlspyCmdPath} (${version})`,
{
remediation:
"Unset REA_ILSPY_CMD_PATH or point it at a runnable ilspycmd executable.",
classification: "config_drift",
},
),
);
}
if (host.platform === "linux" && hopperPath !== undefined)
checks.push(
check(
@ -342,6 +361,9 @@ export const systemDoctorHost = (
...(process.env.HOPPER_LAUNCHER_PATH === undefined
? {}
: { configuredHopperPath: process.env.HOPPER_LAUNCHER_PATH }),
...(process.env.REA_ILSPY_CMD_PATH === undefined
? {}
: { configuredIlspyCmdPath: process.env.REA_ILSPY_CMD_PATH }),
async macosVersion() {
try {
return (
@ -422,6 +444,16 @@ export const systemDoctorHost = (
...(options.javascriptReplayCheck === undefined
? {}
: { javascriptReplayCheck: options.javascriptReplayCheck }),
async ilspyCmdVersion(path) {
try {
await access(path, constants.X_OK);
return firstIlspyVersionLine(
(await execFileAsync(path, ["--version"], { timeout: 10_000 })).stdout,
);
} catch {
return undefined;
}
},
async installationPaths() {
try {
const command = process.platform === "win32" ? "where" : "which";
@ -487,6 +519,10 @@ const uniqueLines = (value: string): string[] => [
.filter((line) => line.length > 0),
),
];
const firstIlspyVersionLine = (value: string): string | undefined =>
uniqueLines(value).find((line) => line.startsWith("ilspycmd:"));
const check = (
name: string,
ok: boolean,

View File

@ -33,6 +33,7 @@ export interface AppConfig {
readonly analysisProvider: AnalysisProviderSelector;
readonly ghidraInstallDir: string | undefined;
readonly ghidraJavaHome: string | undefined;
readonly ilspyCmdPath: string | undefined;
readonly hopperLauncherPath: string;
readonly hopperTargetPath: string | undefined;
readonly hopperTargetKind: "executable" | "database";
@ -84,6 +85,11 @@ const environmentSchema = z
.min(1)
.refine(isAbsolute, "JAVA_HOME must be absolute")
.optional(),
REA_ILSPY_CMD_PATH: z
.string()
.min(1)
.refine(isAbsolute, "REA_ILSPY_CMD_PATH must be absolute")
.optional(),
HOPPER_LAUNCHER_PATH: z.string().min(1).optional(),
HOPPER_TARGET_PATH: z.string().min(1).optional(),
HOPPER_TARGET_KIND: z
@ -483,6 +489,7 @@ export const parseConfig = (
analysisProvider: parsedEnvironment.data.REA_ANALYSIS_PROVIDER,
ghidraInstallDir: parsedEnvironment.data.GHIDRA_INSTALL_DIR,
ghidraJavaHome: parsedEnvironment.data.JAVA_HOME,
ilspyCmdPath: parsedEnvironment.data.REA_ILSPY_CMD_PATH,
hopperLauncherPath:
parsedEnvironment.data.HOPPER_LAUNCHER_PATH ??
defaultHopperLauncherPath(),

View File

@ -79,6 +79,20 @@ describe("runtime configuration", () => {
expect(parseConfig({ JAVA_HOME: "relative/jdk" }).ok).toBe(false);
});
it("parses an optional absolute BYO ilspycmd path", () => {
expect(
parseConfig({ REA_ILSPY_CMD_PATH: "/home/user/.dotnet/tools/ilspycmd" }),
).toMatchObject({
ok: true,
value: {
ilspyCmdPath: "/home/user/.dotnet/tools/ilspycmd",
},
});
expect(parseConfig({ REA_ILSPY_CMD_PATH: "relative/ilspycmd" }).ok).toBe(
false,
);
});
it("builds a separate Electron endpoint and file-root ceiling", () => {
const result = parseConfig({
REA_ELECTRON_OBSERVE_ENABLED: "true",

View File

@ -68,6 +68,45 @@ describe("doctor", () => {
expect(result.healthy).toBe(true);
});
it("reports optional BYO ilspycmd diagnostics only when configured", async () => {
const result = await runDoctor(
undefined,
host({
configuredIlspyCmdPath: "/tools/ilspycmd",
ilspyCmdVersion: (path) =>
Promise.resolve(
path === "/tools/ilspycmd" ? "ilspycmd: 9.1.0.7988" : undefined,
),
}),
);
expect(result.healthy).toBe(true);
expect(result.checks).toContainEqual({
name: "ilspycmd",
ok: true,
classification: "healthy",
detail: "/tools/ilspycmd (ilspycmd: 9.1.0.7988)",
});
});
it("reports configured ilspycmd drift without installing it", async () => {
const result = await runDoctor(
undefined,
host({
configuredIlspyCmdPath: "/missing/ilspycmd",
ilspyCmdVersion: () => Promise.resolve(undefined),
}),
);
expect(result.healthy).toBe(false);
expect(result.checks).toContainEqual({
name: "ilspycmd",
ok: false,
classification: "config_drift",
detail: "/missing/ilspycmd",
remediation:
"Unset REA_ILSPY_CMD_PATH or point it at a runnable ilspycmd executable.",
});
});
it("does not fall back when the configured Hopper launcher is invalid", async () => {
const configuredPath = "/invalid/custom/hopper";
const result = await runDoctor(