feat(ghidra): implement read-only inventory operations

This commit is contained in:
N0zoM1z0 2026-07-16 01:51:27 +08:00 committed by N0zoM1z0
parent f0e625d7ee
commit b1c07dd9c6
101 changed files with 3825 additions and 377 deletions

View File

@ -30,7 +30,7 @@
See a feature in an app that you want in your own product? Give the app to your agent—even without its source code. With REA, the agent can investigate the feature, explain how it works, show its evidence, and build a version adapted to your stack and requirements.
REA gives agents one consistent way to investigate software. Today that includes deep native analysis through Hopper, a bring-your-own Ghidra headless-session foundation on Linux, complete function dossiers, reproducible Evidence v2 records, controlled process capture, passive website and Electron observation, and bounded JavaScript/source-map reconstruction. The Ghidra foundation deliberately exposes no binary operations yet; Hopper remains the operation-capable deep provider. The longer-term toolkit extends the same agent workflow to APIs, protocols, mobile artifacts, firmware, richer runtime behavior, and differences between versions.
REA gives agents one consistent way to investigate software. Today that includes deep native analysis through Hopper, bring-your-own Ghidra read-only inventory on Linux, complete Hopper function dossiers, reproducible Evidence v2 records, controlled process capture, passive website and Electron observation, and bounded JavaScript/source-map reconstruction. The longer-term toolkit extends the same agent workflow to APIs, protocols, mobile artifacts, firmware, richer runtime behavior, and differences between versions.
Reverse engineering normally makes the operator choose a tool, learn its API, move evidence between programs, and decide what to inspect next. REA gives that work to the agent through commands, skills, structured results, and repeatable investigation workflows.
@ -153,7 +153,7 @@ Choose either the no-install commands or the global installation. You do not nee
- Node.js 22.19+ or 24.11+ (including newer releases)
- npm; REA does not require or install a particular npm version
Deep binary operations currently use [Hopper](https://www.hopperapp.com/), a separate desktop application with its own license. REA also ships the first Ghidra provider layer: Linux x64 discovery, exact Ghidra 12.1.2/JDK 21 validation, deterministic target/profile binding, and a private read-only `analyzeHeadless` session. That layer intentionally declares no binary operations until their semantic contracts and real-provider conformance land. Setup reuses an existing Hopper installation or an operator-supplied Ghidra installation. It never downloads Ghidra or installs Java. If neither provider is ready, interactive setup proposes Hopper; unattended Hopper installation requires `rea setup --yes --install-hopper`.
Deep binary operations use [Hopper](https://www.hopperapp.com/), a separate desktop application with its own license, or a caller-selected Ghidra provider. Ghidra currently supplies program identity, procedure/string/symbol inventories, memory blocks, address/name and containing-procedure resolution, and bounded search; decompilation, calls, xrefs, GUI state, and mutations remain unavailable through that provider. Setup reuses an existing Hopper installation or an operator-supplied Ghidra installation. It never downloads Ghidra or installs Java. If neither provider is ready, interactive setup proposes Hopper; unattended Hopper installation requires `rea setup --yes --install-hopper`.
If something is not working, run:
@ -186,7 +186,7 @@ Install the missing distribution packages and rerun `rea setup`. Linux demo auto
REA defaults `HOPPER_LAUNCHER_PATH` to `/Applications/Hopper Disassembler.app/Contents/MacOS/hopper` on macOS and `/opt/hopper/bin/Hopper` on Linux. Explicit configuration always takes precedence.
### Ghidra headless-session foundation
### Ghidra read-only inventory provider
The current Ghidra adapter supports the exact official Ghidra 12.1.2 release on Linux x64 with a 64-bit full JDK 21. Download and extract those projects yourself, then configure absolute paths:
@ -200,7 +200,11 @@ rea providers --json
Doctor distinguishes missing configuration, a bad installation root, the wrong Ghidra or Java version, a JRE without `javac`, a missing `support/analyzeHeadless`, and an unsupported platform or architecture. Approved setup only copies the verified non-secret paths into detected MCP registrations; it does not modify the Ghidra installation or install/download Ghidra or Java.
REA loads its packaged Java `HeadlessScript` with `-scriptPath`, imports the target into a mode-0700 temporary project, enables `-readOnly` and `-deleteProject`, caps auto-analysis at 300 seconds with two CPUs and a 2 GiB Java heap, and authenticates `ping`/`shutdown` over a mode-0600 Unix socket. It isolates Ghidra home/cache/config/temp paths and removes the owned project, socket, process group, and runtime root on close, cancellation, timeout, or process exit. This proves the provider lifecycle and analysis-profile commitment; it does **not** make `decompile`, inventory, xref, or function operations available through Ghidra in this release.
REA loads its packaged Java `HeadlessScript` with `-scriptPath`, imports the target into a mode-0700 temporary project, enables `-readOnly` and `-deleteProject`, caps auto-analysis at 300 seconds with two CPUs and a 2 GiB Java heap, and authenticates every request over a mode-0600 Unix socket. It isolates Ghidra home/cache/config/temp paths and removes the owned project, socket, process group, and runtime root on close, cancellation, timeout, or process exit.
The Ghidra adapter declares exactly ten direct operations: `list_documents`, `list_procedures`, `list_strings`, `list_names`, `list_segments`, `address_name`, `procedure_address`, `resolve_containing_procedure`, `search_procedures`, and `search_strings`. These also enable the shared Swift/Objective-C inventory workflows and `binary_overview`; workflows that require decompilation, calls, or xrefs remain unavailable. Default-space addresses are lowercase `0x` hexadecimal. Other spaces, including `EXTERNAL`, use `<percent-encoded-space>:0x<hex>`. Symbol results identify primary, dynamic, external, type, and source facts; procedures distinguish external functions and thunks; strings identify charset, missing-terminator state, byte length, and value truncation; memory-block ends are exclusive and permissions come directly from Ghidra.
The bridge serves operations only after auto-analysis completes. An analysis timeout, inventory safety limit, request timeout, or oversized response fails explicitly instead of returning a partial result labeled complete. `npm run verify:ghidra` compiles source-owned debug and stripped ELF fixtures, validates external symbols and every admitted operation against real Ghidra 12.1.2, and proves cleanup.
To remove only REA-owned MCP registrations and the managed skill:
@ -378,7 +382,7 @@ REA is growing into a toolkit for understanding software across static artifacts
### Now
1. **Maintain truthful product metadata** — extend the shipped canonical catalog and drift checks whenever versions, tools, providers, schemas, setup clients, or CLI capabilities change.
2. **Ghidra read-only operations** — extend the shipped discovery/profile/headless-session foundation with individually admitted inventory, decompilation, call, and xref capabilities, verified on real source-owned binaries without pretending Hopper and Ghidra results are textually identical.
2. **Ghidra function analysis** — extend the shipped read-only inventory operations with individually admitted decompilation, assembly, call, xref, and CFG capabilities, verified on real source-owned binaries without pretending Hopper and Ghidra results are textually identical.
3. **JavaScript application reconstruction** — connect packages, ASAR entries, main/preload/renderer bundles, source maps, Electron IPC boundaries, service-worker assets, and native add-ons in one evidence-bearing application graph.
### Next
@ -395,7 +399,7 @@ REA is growing into a toolkit for understanding software across static artifacts
New providers must produce the same evidence and safety metadata as existing capabilities before they become part of the public workflow. Once REA has multiple optional toolchains, setup can become capability-selective; the consent rules for that future work are recorded in the [installation roadmap](docs/roadmap.md).
See the [static-analysis provider evaluation](docs/provider-evaluation.md) for the shipped Ghidra foundation, remaining admission gates, and provider comparison matrix, and [ADR-0001](docs/adr/0001-provider-selection-and-analysis-profiles.md) for the binding, selection, profile, snapshot, and compatibility decisions.
See the [static-analysis provider evaluation](docs/provider-evaluation.md) for the shipped Ghidra inventory boundary, remaining admission gates, and provider comparison matrix, and [ADR-0001](docs/adr/0001-provider-selection-and-analysis-profiles.md) for the binding, selection, profile, snapshot, and compatibility decisions.
## Using REA with other agents
@ -429,7 +433,7 @@ flowchart LR
REA --> Session["Target-bound session router"]
Session --> Registry["Deep-provider registry<br/>deterministic selection"]
Registry --> Hopper["Hopper provider"]
Registry --> Ghidra["Ghidra provider<br/>headless foundation; no binary ops"]
Registry --> Ghidra["Ghidra provider<br/>read-only inventory operations"]
Hopper --> Runtime["Owned provider runtime<br/>deadline + bounded diagnostics + cleanup"]
Ghidra --> Runtime
Session --> Native["Native macOS provider"]
@ -508,9 +512,10 @@ the authoritative `analysis_provider_candidates` and
`analysis_provider_binding` fields. Reopening the same target without a selector
keeps its binding; runtime failure never selects another provider silently.
Ghidra can appear as an available, target-compatible candidate after doctor
validates its exact installation, but its capability list is empty in this
foundation release. Selecting it does not make Hopper-backed operations
available and never triggers a silent fallback.
validates its exact installation. Its capability list contains only the ten
admitted read-only inventory operations; selecting it does not make
Hopper-only decompilation, call/xref, GUI, or mutation operations available and
never triggers a silent fallback.
### CLI exit status

File diff suppressed because it is too large Load Diff

View File

@ -5,9 +5,9 @@
- Implementation status: The provider registry, deterministic selection,
target binding, analysis-profile commitment, and snapshot/Evidence migration
are implemented. Ghidra discovery, target/profile resolution, doctor checks,
and the private headless-session foundation are implemented; Ghidra analysis
capabilities remain intentionally undeclared pending operation-level
conformance work.
the private headless-session foundation, and ten read-only inventory
capabilities are implemented. Function-analysis capabilities remain gated on
operation-level conformance work.
## Context
@ -538,7 +538,7 @@ into false certainty.
## Implementation progress
The first four implementation stages are shipped:
The first five implementation stages are shipped:
1. Provider-specific target state was replaced by generic profile and snapshot
v2 commitments while preserving Hopper execution behavior.
@ -547,9 +547,13 @@ The first four implementation stages are shipped:
3. Proven process-lifecycle primitives were extracted for shared use.
4. Ghidra availability, target/profile resolution, doctor checks, and a private
read-only headless session were admitted without declaring operations.
5. Program identity, procedures, strings, symbols, memory blocks,
address/name resolution, containing-procedure resolution, and bounded search
were admitted with exact wire schemas and real debug/stripped ELF
conformance.
The remaining stage is to add Ghidra capabilities individually and verify each
real semantic claim across the shared source-owned conformance corpus. Until
that happens, Hopper remains the only deep provider with callable analysis
operations; Ghidra's empty capability set prevents accidental routing to an
unverified implementation.
The remaining stages add function details, decompilation, assembly, calls,
xrefs, and CFG individually and verify each real semantic claim across the
shared source-owned conformance corpus. Ghidra continues to omit GUI and
mutation operations, so unsupported requests cannot route to an unverified
implementation.

View File

@ -1 +1 @@
window.hierarchyData = "eJylmd9vozgQx/8Xnr0cP2yD89aNeruVVteo3VUfTlHkgJtaJZgzpFW02v/9ZEhaE5ti6EtaEN+ZD+Px2B5+e1KIpvYW/0KIIhClJIzVL45ABGGcgBinKAUwDtV9SOIIhAGOEhChOApAiDAO1sCT7LFgWcNFWXuL356ypf6WdM+8hXdV0uJY8/paSiE94D3zMvcWYZQC7yALb+FlBa1rVv+Viz3l5Yap52q/J/Ofmn3hge5Rb+E1df5F2fnS3QBe9sSLXLKyfRUMAYQJBhCmKYCQEABRGAGIIgwgitUPDgBE6hFEQgBxAAHEUQoghgGAGEUAYowAxEkKYIIggAnGACaJ+k/ZSwIC13+Ap5xp7/pdVBWTE99UE016T5wSAHFHkwCYRAGASawIIerYEmwZh5UUjchEMXM8evIR3hYiTS0QN2V1aGYSvGtd3BNicX97aOb718QOACi0TYYlreiWF7w5/irpC+UF3RZsJs+wLRe8yJYjS1pmrChYPhtJ17tgxDaMn3zPxOxx0tUuCDjQEFZSvPCcyXt2Km0TIex6F4zepD2bucpp1UyuLDa1CwIJNYSvUrzWTN5uayZf6IxQDBhwAMGBXlyvZMMfadbcVkzO4bDrXTAivYRdq5CWGbspG7aTvDlOxLDrXTBgYMH4wfd86gwxtS7ue6v62cTffHLdMqQuzjHSnN+UL6xu+K4dxQchn+uKZlMxPjDiApToOfGrfC7Fa3nHdrxu5NSMsKldEFJibD3mVUxT6+KemO7nrhs2tQNCEiQGwsztjUXsAhAFBsAd24tmajIaUhfnsbn1XEmRsXrqXtvUuriHyHB/31A5L/nelS6ukf7mS1E+8t1h1ppgal3cY32J/kd85SWVx9uKTfVuSF2cJ/q7d/qfVO7Y1LgbUhfnvTm/YnLP65qL8o79d+By8rQfMDAO0p5CrST3majYG0GE8JmAlw2TjzR7h6jeRCtR8OzoX1gZxHgz1T+QhQGOkTogd8ev9nIwWqxuPk15suPA2eFAO843ScvPw7RWHFFU30BDeWBbtRiXjZDHO1aLg1S7o+rgCPWqyf1BW5NHE+EkXne0SazR3jfqfPXAtmfzMygNG26BU02ZoLc15/mO/aCHMnsaoXhqq+xGVzDp65fuCMkAApOfhmDDk39gnCIIUbjuyFBorEhXVVXwrC3vBqSlPtkJB02NV6oIotTcI5wPZg4ofYF/cengn0R69n574rmkTimzax/d6Aomff3SNWVIHA0gjKbMOMSclCEw7VKGwNQg+85oXrC6dsmXj/Au7TgNVmJGyiVZehxv2XFxOe5ftXUt3YfTztApa6ru2c2F1rfamjHZ4wC0Od2OH4K9NW2ZV6dmg0vMtt2jG1PlW26NBy8hIenDXKvejxTlRJpLmW+7N86juvm23ue5/bEScmyFpe8lb6M1gDsCq8HJI5qSkIAYxgFZn6BtDdtlwdnoJsWJtrPkWLnUpxB7C70/np/gGR3QgcDBICYxiEgQJG3g1D8foC5pmfOcNmO7lUnMb0ZnVOBEfWNCaaDg4xDFxDjV3LN2Y/nRpNFpeyK/fzU6WdoEHCKYOFEMrW/emRivNkBtpNQHuQ+bs1NhrQYsPdtZk1vV5/ZTlErW3pF9X4maN8ylMuq4htA374wfY9X3TL2Xeaqt86M4YMEfuj81jmppWXcdLwL7C7RaTJe0ag5yvOekI1ukvu3eSDT//Pkf4OlXYw=="
window.hierarchyData = "eJylmdtupDgQht+Faw/LwQfIXaaVnYk02rSSGeViFbUccDpWaJs1dKJoNO++MqQ7pm2CITdJg/irPsrlsl38DpSUbROc/QshSkCS5RiBJI9iCBIIUwJSnMcRgGms78McERBHOCEgQSlJQIwwju5AoNhDxYqWS9EEZ78DbUv/F3THgrPgXNDqteHNhVJSBSB44qIMzuIkA8FeVcFZUFS0aVjzVyl3lIsN08814UAWPra7KgD9o8FZ0DblF23nS38DBMUjr0rFRPcqGAIICQYQZhmAMM8BRHECIEowgCjVf3AEINKPoDwGEEcQQJxkAGIYAYhRAiDGCEBMMgAJggASjAEkRP/S9kgM8d0fEGhnxrt+l3XN1Mw3NUSz3hNnOYC4o4kIgCSJACSpJoSoZyPYMQ5rJVtZyGrheAzkE7wdRJY5IC5FvW8XErxrfdznucP91b5d7t8QewCg2DUZVrSm97zi7esvQZ8pr+h9xRbyjNvywUtcObKiomBVxcrFSKbeByN1YfzkOyYXj5Op9kHAkYGwVvKZl0zdsLfSNhPCrffBGEzag5nzktbt7MriUvsg5LGB8FXJl4apq/uGqWe6IBQjBjxAcGQW13PV8gdatFc1U0s43HofjMQsYRc6pKJgl6JlW8Xb15kYbr0PBowcGD/4js+dIbbWx/1gVT+Y+JvPrluW1Mc5RobzS/HMmpZvu1G8leqpqWkxF+MDIz5AxMyJX+JJyBdxzba8adXcjHCpfRCy3Np6LKuYttbHfW67X7puuNQeCCQiFsLC7Y1D7AOQRBbANdvJdm4yWlIf56m99VwrWbBm7l7b1vq4h8hyf9NStSz53pU+rpH55ispHvh2v2hNsLU+7rG5RP8jv3JB1etVzeZ6t6Q+zon57r3+J1VbNjfultTH+WDOr5na8abhUlyz//ZczZ72IwamQbpTqJPkppA1OxIkCB8IuGiZeqDFO0R9FK1lxYvX8MTKKMbR1PBAFkc4RfqA3B+/usvRaLGm/TTlmx0Pzh4HunG+KSo+D9NZ8UTRfQMD5Zbd68VYtFK9XrNG7pXeHdV7T6gXQx6O2po9mgiT9K6nJalBe9Pq89Utuz+YX0Bp2fALnG7KRIOtOS+37Afdi+JxguKxq7IbU8FUaF76I5ARBKY+DcHGJ//IOCUQoviuJ0OxtSKd13XFi668W5CO+uQmHDU1XakSiDJ7j3A4mHmgDAXhyaWH/xyaO9Vvj7xU1Ctltt2jG1PBVGhe+qZMjsgIwmTKTEMsSZm8n9rdD4vsO6NlxZrGJ18+wju14zFYKIpii8cnWQYcx+w4ufTwn5LE0X142xl6ZU3dP7s50YZOWwsmexqBLqe78UMwNzNrVdZvzQafmN33j25sVei4NR08kpN4CHOhez9Kipk0p7LQdW+aR3fzXb3PQ/tjLdXUCkvfS97GaAD3BE6Ds0c0y0kMUpjivohnwyAeG4oVZ5ObFC/a3pJn5dKfQtwt9OF4foJnckBHAgcjCLuPNSi/61GRq9N9ML+iouQlbad2K7OYj0Znj7oudKBbGzV8Gp+0HLujyQ3rNpYfTRqTdiAKh1eTk6VLwDGCmRPF0ob2nZnx6gLURUp/kPuwOTsX1mnA0bNdNLl1fe4+RelkHRzZd7VseMt8KqOJawlD+870MVZ/zzR7mW+1dXkURyyEY/fnxlEvLV0c9XfH4QKtF9MVrdu9mu45mcgOaei6NxHNP3/+B3jTV10="

File diff suppressed because one or more lines are too long

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="46892">
<section class="tsd-panel tsd-hierarchy" data-refl="46944">
<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="47094">
<section class="tsd-panel tsd-hierarchy" data-refl="47146">
<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="48673">
<section class="tsd-panel tsd-hierarchy" data-refl="48725">
<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

@ -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="24939">
<section class="tsd-panel tsd-hierarchy" data-refl="24964">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>

View File

@ -19,7 +19,7 @@
<ul class="tsd-hierarchy">
<li><a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html" class="tsd-signature-type tsd-kind-interface">AnalysisProviderCandidate</a></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L56">src/ghidra/GhidraProvider.ts:56</a></li></ul></aside>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L177">src/ghidra/GhidraProvider.ts:177</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>
@ -45,17 +45,18 @@
<h3 class="tsd-anchor-link" id="constructor"><span>constructor</span><a href="#constructor" 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>
<ul class="tsd-signatures">
<li class="">
<div class="tsd-signature tsd-anchor-link" id="constructorghidraprovider"><span class="tsd-signature-keyword">new</span> <span class="tsd-kind-constructor-signature">GhidraProvider</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">config</span><span class="tsd-signature-symbol">:</span> <a href="../interfaces/config.AppConfig.html" class="tsd-signature-type tsd-kind-interface">AppConfig</a><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">logger</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Logger</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">installationHost</span><span class="tsd-signature-symbol">?:</span> <a href="../interfaces/ghidra_GhidraInstallation.GhidraInstallationHost.html" class="tsd-signature-type tsd-kind-interface">GhidraInstallationHost</a><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <a href="" class="tsd-signature-type tsd-kind-class">GhidraProvider</a><a href="#constructorghidraprovider" 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></div>
<div class="tsd-signature tsd-anchor-link" id="constructorghidraprovider"><span class="tsd-signature-keyword">new</span> <span class="tsd-kind-constructor-signature">GhidraProvider</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">config</span><span class="tsd-signature-symbol">:</span> <a href="../interfaces/config.AppConfig.html" class="tsd-signature-type tsd-kind-interface">AppConfig</a><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">logger</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Logger</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">installationHost</span><span class="tsd-signature-symbol">?:</span> <a href="../interfaces/ghidra_GhidraInstallation.GhidraInstallationHost.html" class="tsd-signature-type tsd-kind-interface">GhidraInstallationHost</a><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">clientFactory</span><span class="tsd-signature-symbol">?:</span> <a href="../types/ghidra_GhidraProvider.GhidraProviderClientFactory.html" class="tsd-signature-type tsd-kind-type-alias">GhidraProviderClientFactory</a><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <a href="" class="tsd-signature-type tsd-kind-class">GhidraProvider</a><a href="#constructorghidraprovider" 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></div>
<div class="tsd-description">
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">config</span>: <a href="../interfaces/config.AppConfig.html" class="tsd-signature-type tsd-kind-interface">AppConfig</a></span></li>
<li><span><span class="tsd-kind-parameter">logger</span>: <span class="tsd-signature-type">Logger</span></span></li>
<li><span><code class="tsd-tag">Optional</code><span class="tsd-kind-parameter">installationHost</span>: <a href="../interfaces/ghidra_GhidraInstallation.GhidraInstallationHost.html" class="tsd-signature-type tsd-kind-interface">GhidraInstallationHost</a></span></li></ul></div>
<li><span><code class="tsd-tag">Optional</code><span class="tsd-kind-parameter">installationHost</span>: <a href="../interfaces/ghidra_GhidraInstallation.GhidraInstallationHost.html" class="tsd-signature-type tsd-kind-interface">GhidraInstallationHost</a></span></li>
<li><span><span class="tsd-kind-parameter">clientFactory</span>: <a href="../types/ghidra_GhidraProvider.GhidraProviderClientFactory.html" class="tsd-signature-type tsd-kind-type-alias">GhidraProviderClientFactory</a><span class="tsd-signature-symbol"> = ...</span></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="" class="tsd-signature-type tsd-kind-class">GhidraProvider</a></h4><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L59">src/ghidra/GhidraProvider.ts:59</a></li></ul></aside></div></li></ul></section></section></details>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L180">src/ghidra/GhidraProvider.ts:180</a></li></ul></aside></div></li></ul></section></section></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="methods-1">Methods<a href="#methods-1" 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></h2></summary>
<section>
@ -68,7 +69,7 @@
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-keyword">readonly</span> <a href="../types/application_AnalysisProvider.CapabilityDescriptor.html" class="tsd-signature-type tsd-kind-type-alias">CapabilityDescriptor</a><span class="tsd-signature-symbol">[]</span></h4><aside class="tsd-sources">
<p>Implementation of <a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html">AnalysisProviderCandidate</a>.<a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html#capabilities">capabilities</a></p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L69">src/ghidra/GhidraProvider.ts:69</a></li></ul></aside></div></li></ul></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L192">src/ghidra/GhidraProvider.ts:192</a></li></ul></aside></div></li></ul></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="createclient"><span>create<wbr/>Client</span><a href="#createclient" 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>
<ul class="tsd-signatures">
@ -83,7 +84,7 @@
<h4 class="tsd-returns-title">Returns <a href="../interfaces/application_AnalysisProvider.AnalysisClient.html" class="tsd-signature-type tsd-kind-interface">AnalysisClient</a></h4><aside class="tsd-sources">
<p>Implementation of <a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html">AnalysisProviderCandidate</a>.<a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html#createclient">createClient</a></p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L143">src/ghidra/GhidraProvider.ts:143</a></li></ul></aside></div></li></ul></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L266">src/ghidra/GhidraProvider.ts:266</a></li></ul></aside></div></li></ul></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="identity"><span>identity</span><a href="#identity" 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>
<ul class="tsd-signatures">
@ -93,7 +94,7 @@
<h4 class="tsd-returns-title">Returns <a href="../interfaces/application_AnalysisProvider.ProviderIdentity.html" class="tsd-signature-type tsd-kind-interface">ProviderIdentity</a></h4><aside class="tsd-sources">
<p>Implementation of <a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html">AnalysisProviderCandidate</a>.<a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html#identity">identity</a></p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L65">src/ghidra/GhidraProvider.ts:65</a></li></ul></aside></div></li></ul></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L188">src/ghidra/GhidraProvider.ts:188</a></li></ul></aside></div></li></ul></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="inspectavailability"><span>inspect<wbr/>Availability</span><a href="#inspectavailability" 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>
<ul class="tsd-signatures">
@ -103,7 +104,7 @@
<h4 class="tsd-returns-title">Returns <a href="../types/application_AnalysisProvider.ProviderAvailability.html" class="tsd-signature-type tsd-kind-type-alias">ProviderAvailability</a></h4><aside class="tsd-sources">
<p>Implementation of <a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html">AnalysisProviderCandidate</a>.<a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html#inspectavailability">inspectAvailability</a></p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L73">src/ghidra/GhidraProvider.ts:73</a></li></ul></aside></div></li></ul></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L196">src/ghidra/GhidraProvider.ts:196</a></li></ul></aside></div></li></ul></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="inspecttargetsupport"><span>inspect<wbr/>Target<wbr/>Support</span><a href="#inspecttargetsupport" 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>
<ul class="tsd-signatures">
@ -117,7 +118,7 @@
<h4 class="tsd-returns-title">Returns <a href="../types/application_AnalysisProvider.ProviderTargetSupport.html" class="tsd-signature-type tsd-kind-type-alias">ProviderTargetSupport</a></h4><aside class="tsd-sources">
<p>Implementation of <a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html">AnalysisProviderCandidate</a>.<a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html#inspecttargetsupport">inspectTargetSupport</a></p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L92">src/ghidra/GhidraProvider.ts:92</a></li></ul></aside></div></li></ul></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L215">src/ghidra/GhidraProvider.ts:215</a></li></ul></aside></div></li></ul></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="resolveanalysisprofile"><span>resolve<wbr/>Analysis<wbr/>Profile</span><a href="#resolveanalysisprofile" 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>
<ul class="tsd-signatures">
@ -132,7 +133,7 @@
<h4 class="tsd-returns-title">Returns <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="../interfaces/application_AnalysisProvider.AnalysisProfileResolution.html" class="tsd-signature-type tsd-kind-interface">AnalysisProfileResolution</a><span class="tsd-signature-symbol">,</span> <a href="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></h4><aside class="tsd-sources">
<p>Implementation of <a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html">AnalysisProviderCandidate</a>.<a href="../interfaces/application_AnalysisProvider.AnalysisProviderCandidate.html#resolveanalysisprofile">resolveAnalysisProfile</a></p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L131">src/ghidra/GhidraProvider.ts:131</a></li></ul></aside></div></li></ul></section></section></details></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L254">src/ghidra/GhidraProvider.ts:254</a></li></ul></aside></div></li></ul></section></section></details></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>Routes validated response IDs without giving the wire protocol client state.</p>
</div></section><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L19">src/ghidra/GhidraResponseRouter.ts:19</a></li></ul></aside>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L20">src/ghidra/GhidraResponseRouter.ts:20</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>
@ -44,7 +44,7 @@
<li><span><span class="tsd-kind-parameter">options</span>: <a href="../interfaces/ghidra_GhidraResponseRouter.GhidraResponseRouterOptions.html" class="tsd-signature-type tsd-kind-interface">GhidraResponseRouterOptions</a></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="" class="tsd-signature-type tsd-kind-class">GhidraResponseRouter</a></h4><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L22">src/ghidra/GhidraResponseRouter.ts:22</a></li></ul></aside></div></li></ul></section></section></details>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L23">src/ghidra/GhidraResponseRouter.ts:23</a></li></ul></aside></div></li></ul></section></section></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="methods-1">Methods<a href="#methods-1" 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></h2></summary>
<section>
@ -62,7 +62,7 @@
<li><span><span class="tsd-kind-parameter">line</span>: <span class="tsd-signature-type">string</span></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L27">src/ghidra/GhidraResponseRouter.ts:27</a></li></ul></aside></div></li></ul></section></section></details></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L28">src/ghidra/GhidraResponseRouter.ts:28</a></li></ul></aside></div></li></ul></section></section></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -14,14 +14,14 @@
<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="25061">
<section class="tsd-panel tsd-hierarchy" data-refl="25092">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">GhidraSessionError</span></li></ul></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L19">src/ghidra/GhidraSessionError.ts:19</a></li></ul></aside>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L20">src/ghidra/GhidraSessionError.ts:20</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>
@ -35,6 +35,7 @@
<h3 class="tsd-index-heading tsd-anchor-link" id="properties">Properties<a href="#properties" 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-index-list"><a href="#diagnostics" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>diagnostics</span></a>
<a href="#kind" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>kind</span></a>
<a href="#remotecode" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>remote<wbr/>Code</span></a>
<a href="#timeoutms" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms</span></a>
</div></section></div></details></section></section>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
@ -56,7 +57,7 @@
<h4 class="tsd-returns-title">Returns <a href="" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a></h4><aside class="tsd-sources">
<p>Overrides Error.constructor</p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L23">src/ghidra/GhidraSessionError.ts:23</a></li></ul></aside></div></li></ul></section></section></details>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L25">src/ghidra/GhidraSessionError.ts:25</a></li></ul></aside></div></li></ul></section></section></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="properties-1">Properties<a href="#properties-1" 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></h2></summary>
<section>
@ -64,17 +65,22 @@
<h3 class="tsd-anchor-link" id="diagnostics"><code class="tsd-tag">Readonly</code><span>diagnostics</span><a href="#diagnostics" 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">diagnostics</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></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L20">src/ghidra/GhidraSessionError.ts:20</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L21">src/ghidra/GhidraSessionError.ts:21</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="kind"><code class="tsd-tag">Readonly</code><span>kind</span><a href="#kind" 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">kind</span><span class="tsd-signature-symbol">:</span> <a href="../types/ghidra_GhidraSessionError.GhidraSessionFailureKind.html" class="tsd-signature-type tsd-kind-type-alias">GhidraSessionFailureKind</a></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L24">src/ghidra/GhidraSessionError.ts:24</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L26">src/ghidra/GhidraSessionError.ts:26</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="remotecode"><code class="tsd-tag">Readonly</code><span>remote<wbr/>Code</span><a href="#remotecode" 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">remoteCode</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></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L23">src/ghidra/GhidraSessionError.ts:23</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="timeoutms"><code class="tsd-tag">Readonly</code><span>timeout<wbr/>Ms</span><a href="#timeoutms" 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">timeoutMs</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">undefined</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L21">src/ghidra/GhidraSessionError.ts:21</a></li></ul></aside></section></section></details></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L22">src/ghidra/GhidraSessionError.ts:22</a></li></ul></aside></section></section></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
@ -92,7 +98,7 @@
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary>
<div><a href="#constructor"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary>
<div><a href="#diagnostics"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>diagnostics</span></a><a href="#kind"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>kind</span></a><a href="#timeoutms"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms</span></a></div></details></div></details></div>
<div><a href="#diagnostics"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>diagnostics</span></a><a href="#kind"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>kind</span></a><a href="#remotecode"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>remote<wbr/>Code</span></a><a href="#timeoutms"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms</span></a></div></details></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">

View File

@ -0,0 +1,87 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GhidraRemoteError | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_protocol.html">ghidra/protocol</a></li>
<li><a href="" aria-current="page">GhidraRemoteError</a></li></ul>
<h1>Class GhidraRemoteError</h1></div>
<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="25172">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Error</span>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">GhidraRemoteError</span></li></ul></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/protocol.ts#L51">src/ghidra/protocol.ts:51</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>
<h5 class="tsd-index-heading uppercase">Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading tsd-anchor-link" id="constructors">Constructors<a href="#constructors" 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-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading tsd-anchor-link" id="properties">Properties<a href="#properties" 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-index-list"><a href="#code" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>code</span></a>
</div></section></div></details></section></section>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="constructors-1">Constructors<a href="#constructors-1" 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></h2></summary>
<section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="constructor"><span>constructor</span><a href="#constructor" 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>
<ul class="tsd-signatures">
<li class="">
<div class="tsd-signature tsd-anchor-link" id="constructorghidraremoteerror"><span class="tsd-signature-keyword">new</span> <span class="tsd-kind-constructor-signature">GhidraRemoteError</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">code</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <a href="" class="tsd-signature-type tsd-kind-class">GhidraRemoteError</a><a href="#constructorghidraremoteerror" 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></div>
<div class="tsd-description">
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">code</span>: <span class="tsd-signature-type">string</span></span></li>
<li><span><span class="tsd-kind-parameter">message</span>: <span class="tsd-signature-type">string</span></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="" class="tsd-signature-type tsd-kind-class">GhidraRemoteError</a></h4><aside class="tsd-sources">
<p>Overrides Error.constructor</p>
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/protocol.ts#L52">src/ghidra/protocol.ts:52</a></li></ul></aside></div></li></ul></section></section></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="properties-1">Properties<a href="#properties-1" 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></h2></summary>
<section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="code"><code class="tsd-tag">Readonly</code><span>code</span><a href="#code" 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">code</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/protocol.ts#L53">src/ghidra/protocol.ts:53</a></li></ul></aside></section></section></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-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>
<h3>On This Page</h3></summary>
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary>
<div><a href="#constructor"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary>
<div><a href="#code"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>code</span></a></div></details></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -16,7 +16,7 @@
<li class="">
<div class="tsd-signature tsd-anchor-link" id="addressdistance"><span class="tsd-kind-call-signature">addressDistance</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">start</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">end</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><a href="#addressdistance" 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></div>
<div class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Return the non-negative byte distance between hexadecimal addresses.</p>
<div class="tsd-comment tsd-typography"><p>Return a bounded byte distance between canonical addresses in one space.</p>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</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/domain_hopperValues.AddressedPage.html" class="tsd-signature-type tsd-kind-interface">AddressedPage</a><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.HopperProtocolError.html" class="tsd-signature-type tsd-kind-class">HopperProtocolError</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/domain/hopperValues.ts#L232">src/domain/hopperValues.ts:232</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L252">src/domain/hopperValues.ts:252</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</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><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> <a href="../classes/domain_errors.HopperProtocolError.html" class="tsd-signature-type tsd-kind-class">HopperProtocolError</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/domain/hopperValues.ts#L313">src/domain/hopperValues.ts:313</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L333">src/domain/hopperValues.ts:333</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.AnalysisOutputError.html" class="tsd-signature-type tsd-kind-class">AnalysisOutputError</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/domain/hopperValues.ts#L216">src/domain/hopperValues.ts:216</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L236">src/domain/hopperValues.ts:236</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -25,7 +25,7 @@
<li><span><span class="tsd-kind-parameter">property</span>: <span class="tsd-signature-type">string</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><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.HopperProtocolError.html" class="tsd-signature-type tsd-kind-class">HopperProtocolError</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/domain/hopperValues.ts#L325">src/domain/hopperValues.ts:325</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L345">src/domain/hopperValues.ts:345</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</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><span class="tsd-signature-keyword">readonly</span> <a href="../interfaces/domain_hopperValues.AddressedName.html" class="tsd-signature-type tsd-kind-interface">AddressedName</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.HopperProtocolError.html" class="tsd-signature-type tsd-kind-class">HopperProtocolError</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/domain/hopperValues.ts#L268">src/domain/hopperValues.ts:268</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L288">src/domain/hopperValues.ts:288</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</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><span class="tsd-signature-keyword">readonly</span> <a href="../interfaces/domain_hopperValues.AddressedName.html" class="tsd-signature-type tsd-kind-interface">AddressedName</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.HopperProtocolError.html" class="tsd-signature-type tsd-kind-class">HopperProtocolError</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/domain/hopperValues.ts#L249">src/domain/hopperValues.ts:249</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L269">src/domain/hopperValues.ts:269</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -25,7 +25,7 @@
<li><span><span class="tsd-kind-parameter">relation</span>: <span class="tsd-signature-type">&quot;callers&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;callees&quot;</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><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> <a href="../classes/domain_errors.HopperProtocolError.html" class="tsd-signature-type tsd-kind-class">HopperProtocolError</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/domain/hopperValues.ts#L290">src/domain/hopperValues.ts:290</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L310">src/domain/hopperValues.ts:310</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</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><span class="tsd-signature-keyword">readonly</span> <a href="../interfaces/domain_hopperValues.SegmentSummary.html" class="tsd-signature-type tsd-kind-interface">SegmentSummary</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.HopperProtocolError.html" class="tsd-signature-type tsd-kind-class">HopperProtocolError</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/domain/hopperValues.ts#L301">src/domain/hopperValues.ts:301</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L321">src/domain/hopperValues.ts:321</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -0,0 +1,44 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>isGhidraInventoryOperation | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraInventoryValues.html">ghidra/GhidraInventoryValues</a></li>
<li><a href="" aria-current="page">isGhidraInventoryOperation</a></li></ul>
<h1>Function isGhidraInventoryOperation</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="">
<div class="tsd-signature tsd-anchor-link" id="isghidrainventoryoperation"><span class="tsd-kind-call-signature">isGhidraInventoryOperation</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">operation</span><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><span class="tsd-signature-symbol">:</span> <span class="tsd-kind-parameter">operation</span> <span class="tsd-signature-keyword">is</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;address_name&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_documents&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_names&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_segments&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_strings&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;procedure_address&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_strings&quot;</span><a href="#isghidrainventoryoperation" 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></div>
<div class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Narrow an application operation to the Ghidra inventory surface.</p>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">operation</span>: <span class="tsd-signature-type">string</span></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-kind-parameter">operation</span> <span class="tsd-signature-keyword">is</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;address_name&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_documents&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_names&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_segments&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_strings&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;procedure_address&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_strings&quot;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in src/ghidra/GhidraInventoryValues.ts:32</li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -0,0 +1,45 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>parseGhidraInventoryInput | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraInventoryValues.html">ghidra/GhidraInventoryValues</a></li>
<li><a href="" aria-current="page">parseGhidraInventoryInput</a></li></ul>
<h1>Function parseGhidraInventoryInput</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="">
<div class="tsd-signature tsd-anchor-link" id="parseghidrainventoryinput"><span class="tsd-kind-call-signature">parseGhidraInventoryInput</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">operation</span><span class="tsd-signature-symbol">:</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;address_name&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_documents&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_names&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_procedures&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_segments&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_strings&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;procedure_address&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_procedures&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_strings&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">value</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-signature-symbol">)</span><span class="tsd-signature-symbol">:</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><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> <a href="../classes/domain_errors.AnalysisInputError.html" class="tsd-signature-type tsd-kind-class">AnalysisInputError</a><span class="tsd-signature-symbol">&gt;</span><a href="#parseghidrainventoryinput" 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></div>
<div class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Validate and default one provider request before it crosses the socket.</p>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">operation</span>: <br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;address_name&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_documents&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_names&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_segments&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_strings&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;procedure_address&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_strings&quot;</span></span></li>
<li><span><span class="tsd-kind-parameter">value</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></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><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> <a href="../classes/domain_errors.AnalysisInputError.html" class="tsd-signature-type tsd-kind-class">AnalysisInputError</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in src/ghidra/GhidraInventoryValues.ts:75</li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -0,0 +1,45 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>parseGhidraInventoryResult | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraInventoryValues.html">ghidra/GhidraInventoryValues</a></li>
<li><a href="" aria-current="page">parseGhidraInventoryResult</a></li></ul>
<h1>Function parseGhidraInventoryResult</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="">
<div class="tsd-signature tsd-anchor-link" id="parseghidrainventoryresult"><span class="tsd-kind-call-signature">parseGhidraInventoryResult</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">operation</span><span class="tsd-signature-symbol">:</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;address_name&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_documents&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_names&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_procedures&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_segments&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_strings&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;procedure_address&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_procedures&quot;</span><br/>        <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_strings&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">value</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.AnalysisOutputError.html" class="tsd-signature-type tsd-kind-class">AnalysisOutputError</a><span class="tsd-signature-symbol">&gt;</span><a href="#parseghidrainventoryresult" 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></div>
<div class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Require exact, bounded Java-bridge output before creating Evidence.</p>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">operation</span>: <br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;address_name&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_documents&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_names&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_segments&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;list_strings&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;procedure_address&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_procedures&quot;</span><br/>    <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;search_strings&quot;</span></span></li>
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/domain_errors.AnalysisOutputError.html" class="tsd-signature-type tsd-kind-class">AnalysisOutputError</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in src/ghidra/GhidraInventoryValues.ts:229</li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -0,0 +1,44 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>bindGhidraSessionFailure | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraSessionError.html">ghidra/GhidraSessionError</a></li>
<li><a href="" aria-current="page">bindGhidraSessionFailure</a></li></ul>
<h1>Function bindGhidraSessionFailure</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="">
<div class="tsd-signature tsd-anchor-link" id="bindghidrasessionfailure"><span class="tsd-kind-call-signature">bindGhidraSessionFailure</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">diagnostics</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">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-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">kind</span><span class="tsd-signature-symbol">:</span> <a href="../types/ghidra_GhidraSessionError.GhidraSessionFailureKind.html" class="tsd-signature-type tsd-kind-type-alias">GhidraSessionFailureKind</a><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">cause</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Pick</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/ghidra_GhidraSessionError.GhidraSessionErrorOptions.html" class="tsd-signature-type tsd-kind-interface">GhidraSessionErrorOptions</a><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">&quot;timeoutMs&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;remoteCode&quot;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a><a href="#bindghidrasessionfailure" 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></div>
<div class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Bind session-failure construction to a live, token-redacted diagnostic view.</p>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">diagnostics</span>: <span class="tsd-signature-symbol">()</span> <span class="tsd-signature-symbol">=&gt;</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></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">kind</span><span class="tsd-signature-symbol">:</span> <a href="../types/ghidra_GhidraSessionError.GhidraSessionFailureKind.html" class="tsd-signature-type tsd-kind-type-alias">GhidraSessionFailureKind</a><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">cause</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Pick</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/ghidra_GhidraSessionError.GhidraSessionErrorOptions.html" class="tsd-signature-type tsd-kind-interface">GhidraSessionErrorOptions</a><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">&quot;timeoutMs&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;remoteCode&quot;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a></h4><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L71">src/ghidra/GhidraSessionError.ts:71</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">JSONType</span></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionValues.ts#L61">src/ghidra/GhidraSessionValues.ts:61</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionValues.ts#L77">src/ghidra/GhidraSessionValues.ts:77</a></li></ul></aside></div></li></ul></section></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

View File

@ -14,7 +14,7 @@
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="">
<div class="tsd-signature tsd-anchor-link" id="ghidraresponseresult"><span class="tsd-kind-call-signature">ghidraResponseResult</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">response</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span><br/>        <span class="tsd-kind-property">error</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">code</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">id</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">ok</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">result</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">;</span><br/>    <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">&gt;</span><a href="#ghidraresponseresult" 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></div>
<div class="tsd-signature tsd-anchor-link" id="ghidraresponseresult"><span class="tsd-kind-call-signature">ghidraResponseResult</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">response</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span><br/>        <span class="tsd-kind-property">error</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">code</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">id</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">ok</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">result</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">;</span><br/>    <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/ghidra_protocol.GhidraRemoteError.html" class="tsd-signature-type tsd-kind-class">GhidraRemoteError</a><span class="tsd-signature-symbol">&gt;</span><a href="#ghidraresponseresult" 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></div>
<div class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Project one validated response into its result or remote failure.</p>
</div>
@ -22,9 +22,9 @@
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">response</span>: <span class="tsd-signature-symbol">{</span><br/>    <span class="tsd-kind-property">error</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">code</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <span class="tsd-kind-property">id</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <span class="tsd-kind-property">ok</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>    <span class="tsd-kind-property">result</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/ghidra_protocol.GhidraRemoteError.html" class="tsd-signature-type tsd-kind-class">GhidraRemoteError</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/ghidra/protocol.ts#L68">src/ghidra/protocol.ts:68</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/protocol.ts#L79">src/ghidra/protocol.ts:79</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -24,7 +24,7 @@
<li><span><span class="tsd-kind-parameter">line</span>: <span class="tsd-signature-type">string</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><br/>    <span class="tsd-signature-symbol">{</span><br/>        <span class="tsd-kind-property">error</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">code</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">id</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">ok</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/>        <span class="tsd-kind-property">result</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">;</span><br/>    <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">,</span><br/><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/ghidra/protocol.ts#L51">src/ghidra/protocol.ts:51</a></li></ul></aside></div></li></ul></section></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/protocol.ts#L62">src/ghidra/protocol.ts:62</a></li></ul></aside></div></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -39,48 +39,48 @@
<li data-refl="4766" 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="4774" 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="4799" 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="47094" 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="47146" 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="28913" 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="28965" 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="28919" 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="34309" 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="28971" 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="34361" 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="31539" 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="31591" 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="28962" 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="29014" 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="40393" 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="29007" 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="40445" 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="29059" 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="24972" 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="25001" 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="24580" 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="24437" 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="24451" 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="36858" 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="36910" 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="25445" 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="25497" 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="43113" 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="43165" 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="27919" 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="27971" 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="24932" 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="24957" 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="24948" 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="24973" 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="10627" 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="10635" 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="10645" 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="25320" 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="25372" 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="24430" 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="24923" 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="24948" 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="15660" 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>

File diff suppressed because one or more lines are too long

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="28919">
<section class="tsd-panel tsd-hierarchy" data-refl="28971">
<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="28913">
<section class="tsd-panel tsd-hierarchy" data-refl="28965">
<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

View File

@ -16,7 +16,7 @@
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">GhidraClientOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#launcher">launcher</a><span class="tsd-signature-symbol">:</span> <a href="ghidra_GhidraLauncher.GhidraLauncher.html" class="tsd-signature-type tsd-kind-interface">GhidraLauncher</a><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#logger">logger</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Logger</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#ondiagnostic">onDiagnostic</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">event</span><span class="tsd-signature-symbol">:</span> <a href="../types/ghidra_GhidraClientTypes.GhidraDiagnostic.html" class="tsd-signature-type tsd-kind-type-alias">GhidraDiagnostic</a><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#profiledigest">profileDigest</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="#providerversion">providerVersion</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="#requesttimeoutms">requestTimeoutMs</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#startuptimeoutms">startupTimeoutMs</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#targetpath">targetPath</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><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L27">src/ghidra/GhidraClientTypes.ts:27</a></li></ul></aside>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L33">src/ghidra/GhidraClientTypes.ts:33</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>
@ -40,42 +40,42 @@
<h3 class="tsd-anchor-link" id="launcher"><code class="tsd-tag">Readonly</code><span>launcher</span><a href="#launcher" 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">launcher</span><span class="tsd-signature-symbol">:</span> <a href="ghidra_GhidraLauncher.GhidraLauncher.html" class="tsd-signature-type tsd-kind-interface">GhidraLauncher</a></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L28">src/ghidra/GhidraClientTypes.ts:28</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L34">src/ghidra/GhidraClientTypes.ts:34</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="logger"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>logger</span><a href="#logger" 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">logger</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Logger</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L35">src/ghidra/GhidraClientTypes.ts:35</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L41">src/ghidra/GhidraClientTypes.ts:41</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="ondiagnostic"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>on<wbr/>Diagnostic</span><a href="#ondiagnostic" 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">onDiagnostic</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">event</span><span class="tsd-signature-symbol">:</span> <a href="../types/ghidra_GhidraClientTypes.GhidraDiagnostic.html" class="tsd-signature-type tsd-kind-type-alias">GhidraDiagnostic</a><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L34">src/ghidra/GhidraClientTypes.ts:34</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L40">src/ghidra/GhidraClientTypes.ts:40</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="profiledigest"><code class="tsd-tag">Readonly</code><span>profile<wbr/>Digest</span><a href="#profiledigest" 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">profileDigest</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L31">src/ghidra/GhidraClientTypes.ts:31</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L37">src/ghidra/GhidraClientTypes.ts:37</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="providerversion"><code class="tsd-tag">Readonly</code><span>provider<wbr/>Version</span><a href="#providerversion" 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">providerVersion</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L30">src/ghidra/GhidraClientTypes.ts:30</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L36">src/ghidra/GhidraClientTypes.ts:36</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="requesttimeoutms"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>request<wbr/>Timeout<wbr/>Ms</span><a href="#requesttimeoutms" 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">requestTimeoutMs</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L32">src/ghidra/GhidraClientTypes.ts:32</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L38">src/ghidra/GhidraClientTypes.ts:38</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="startuptimeoutms"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>startup<wbr/>Timeout<wbr/>Ms</span><a href="#startuptimeoutms" 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">startupTimeoutMs</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L33">src/ghidra/GhidraClientTypes.ts:33</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L39">src/ghidra/GhidraClientTypes.ts:39</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="targetpath"><code class="tsd-tag">Readonly</code><span>target<wbr/>Path</span><a href="#targetpath" 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">targetPath</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L29">src/ghidra/GhidraClientTypes.ts:29</a></li></ul></aside></section></section></details></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L35">src/ghidra/GhidraClientTypes.ts:35</a></li></ul></aside></section></section></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -0,0 +1,64 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GhidraRequestOptions | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraClientTypes.html">ghidra/GhidraClientTypes</a></li>
<li><a href="" aria-current="page">GhidraRequestOptions</a></li></ul>
<h1>Interface GhidraRequestOptions</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Cancellation and deadline controls shared by authenticated requests.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">GhidraRequestOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#signal">signal</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">AbortSignal</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><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L11">src/ghidra/GhidraClientTypes.ts:11</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>
<h5 class="tsd-index-heading uppercase">Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading tsd-anchor-link" id="properties">Properties<a href="#properties" 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-index-list"><a href="#signal" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>signal?</span></a>
<a href="#timeoutms" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms?</span></a>
</div></section></div></details></section></section>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="properties-1">Properties<a href="#properties-1" 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></h2></summary>
<section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="signal"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>signal</span><a href="#signal" 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">signal</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">AbortSignal</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L12">src/ghidra/GhidraClientTypes.ts:12</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="timeoutms"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>timeout<wbr/>Ms</span><a href="#timeoutms" 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">timeoutMs</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L13">src/ghidra/GhidraClientTypes.ts:13</a></li></ul></aside></section></section></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-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>
<h3>On This Page</h3></summary>
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary>
<div><a href="#signal"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>signal</span></a><a href="#timeoutms"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms</span></a></div></details></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

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="24923">
<section class="tsd-panel tsd-hierarchy" data-refl="24948">
<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

@ -14,9 +14,9 @@
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Dependencies for correlating validated bridge responses.</p>
</div></section>
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">GhidraResponseRouterOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#nextid">nextId</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">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#pending">pending</a><span class="tsd-signature-symbol">:</span> <a href="../classes/process_PendingOperations.PendingOperations.html" class="tsd-signature-type tsd-kind-class">PendingOperations</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">,</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#protocolfailure">protocolFailure</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">cause</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#remotefailure">remoteFailure</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">cause</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources">
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">GhidraResponseRouterOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#nextid">nextId</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">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#pending">pending</a><span class="tsd-signature-symbol">:</span> <a href="../classes/process_PendingOperations.PendingOperations.html" class="tsd-signature-type tsd-kind-class">PendingOperations</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">,</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#protocolfailure">protocolFailure</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">cause</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#remotefailure">remoteFailure</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">failure</span><span class="tsd-signature-symbol">:</span> <a href="../classes/ghidra_protocol.GhidraRemoteError.html" class="tsd-signature-type tsd-kind-class">GhidraRemoteError</a><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a><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/ghidra/GhidraResponseRouter.ts#L8">src/ghidra/GhidraResponseRouter.ts:8</a></li></ul></aside>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L9">src/ghidra/GhidraResponseRouter.ts:9</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>
@ -36,22 +36,22 @@
<h3 class="tsd-anchor-link" id="nextid"><code class="tsd-tag">Readonly</code><span>next<wbr/>Id</span><a href="#nextid" 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">nextId</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">number</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L13">src/ghidra/GhidraResponseRouter.ts:13</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L14">src/ghidra/GhidraResponseRouter.ts:14</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="pending"><code class="tsd-tag">Readonly</code><span>pending</span><a href="#pending" 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">pending</span><span class="tsd-signature-symbol">:</span> <a href="../classes/process_PendingOperations.PendingOperations.html" class="tsd-signature-type tsd-kind-class">PendingOperations</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">,</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><span class="tsd-signature-type">JSONType</span><span class="tsd-signature-symbol">,</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a><span class="tsd-signature-symbol">&gt;</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/ghidra/GhidraResponseRouter.ts#L9">src/ghidra/GhidraResponseRouter.ts:9</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L10">src/ghidra/GhidraResponseRouter.ts:10</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="protocolfailure"><code class="tsd-tag">Readonly</code><span>protocol<wbr/>Failure</span><a href="#protocolfailure" 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">protocolFailure</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">cause</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L15">src/ghidra/GhidraResponseRouter.ts:15</a></li></ul></aside></section>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L16">src/ghidra/GhidraResponseRouter.ts:16</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="remotefailure"><code class="tsd-tag">Readonly</code><span>remote<wbr/>Failure</span><a href="#remotefailure" 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">remoteFailure</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">cause</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Error</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a></div><aside class="tsd-sources">
<div class="tsd-signature"><span class="tsd-kind-property">remoteFailure</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">failure</span><span class="tsd-signature-symbol">:</span> <a href="../classes/ghidra_protocol.GhidraRemoteError.html" class="tsd-signature-type tsd-kind-class">GhidraRemoteError</a><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <a href="../classes/ghidra_GhidraSessionError.GhidraSessionError.html" class="tsd-signature-type tsd-kind-class">GhidraSessionError</a></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L14">src/ghidra/GhidraResponseRouter.ts:14</a></li></ul></aside></section></section></details></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraResponseRouter.ts#L15">src/ghidra/GhidraResponseRouter.ts:15</a></li></ul></aside></section></section></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -14,8 +14,8 @@
<section class="tsd-panel tsd-comment">
<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="#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="25059">
<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="25089">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">ErrorOptions</span>
@ -30,12 +30,18 @@
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading tsd-anchor-link" id="properties">Properties<a href="#properties" 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-index-list"><a href="#timeoutms" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms?</span></a>
<div class="tsd-index-list"><a href="#remotecode" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>remote<wbr/>Code?</span></a>
<a href="#timeoutms" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms?</span></a>
</div></section></div></details></section></section>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="properties-1">Properties<a href="#properties-1" 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></h2></summary>
<section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="remotecode"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>remote<wbr/>Code</span><a href="#remotecode" 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">remoteCode</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionError.ts#L16">src/ghidra/GhidraSessionError.ts:16</a></li></ul></aside></section>
<section class="tsd-panel tsd-member">
<h3 class="tsd-anchor-link" id="timeoutms"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>timeout<wbr/>Ms</span><a href="#timeoutms" 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">timeoutMs</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources">
<ul>
@ -55,7 +61,7 @@
<h3>On This Page</h3></summary>
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary>
<div><a href="#timeoutms"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms</span></a></div></details></div></details></div>
<div><a href="#remotecode"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>remote<wbr/>Code</span></a><a href="#timeoutms"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>timeout<wbr/>Ms</span></a></div></details></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">

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="25320">
<section class="tsd-panel tsd-hierarchy" data-refl="25372">
<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

@ -13,7 +13,7 @@
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="classes">Classes<a href="#classes" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraclient"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="../assets/icons.svg#icon-128"></use></svg><a href="../classes/ghidra_GhidraClient.GhidraClient.html">GhidraClient</a><a href="#ghidraclient" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-References"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="references">References<a href="#references" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraclientoptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><span>GhidraClientOptions</span><span> → </span><a href="../interfaces/ghidra_GhidraClientTypes.GhidraClientOptions.html">GhidraClientOptions</a><a href="#ghidraclientoptions" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidradiagnostic"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>GhidraDiagnostic</span><span> → </span><a href="../types/ghidra_GhidraClientTypes.GhidraDiagnostic.html">GhidraDiagnostic</a><a href="#ghidradiagnostic" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidrastartresult"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>GhidraStartResult</span><span> → </span><a href="../types/ghidra_GhidraClientTypes.GhidraStartResult.html">GhidraStartResult</a><a href="#ghidrastartresult" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<h2 class="tsd-anchor-link" id="references">References<a href="#references" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraclientoptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><span>GhidraClientOptions</span><span> → </span><a href="../interfaces/ghidra_GhidraClientTypes.GhidraClientOptions.html">GhidraClientOptions</a><a href="#ghidraclientoptions" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidradiagnostic"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>GhidraDiagnostic</span><span> → </span><a href="../types/ghidra_GhidraClientTypes.GhidraDiagnostic.html">GhidraDiagnostic</a><a href="#ghidradiagnostic" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidrarequestoptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><span>GhidraRequestOptions</span><span> → </span><a href="../interfaces/ghidra_GhidraClientTypes.GhidraRequestOptions.html">GhidraRequestOptions</a><a href="#ghidrarequestoptions" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidrastartresult"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>GhidraStartResult</span><span> → </span><a href="../types/ghidra_GhidraClientTypes.GhidraStartResult.html">GhidraStartResult</a><a href="#ghidrastartresult" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
@ -31,7 +31,7 @@
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Classes</summary>
<div><a href="#ghidraclient"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="../assets/icons.svg#icon-128"></use></svg><span>Ghidra<wbr/>Client</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-References"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>References</summary>
<div><a href="#ghidraclientoptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Reference"><use href="../assets/icons.svg#icon-4194304"></use></svg><span>Ghidra<wbr/>Client<wbr/>Options</span></a><a href="#ghidradiagnostic"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Reference"><use href="../assets/icons.svg#icon-4194304"></use></svg><span>Ghidra<wbr/>Diagnostic</span></a><a href="#ghidrastartresult"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Reference"><use href="../assets/icons.svg#icon-4194304"></use></svg><span>Ghidra<wbr/>Start<wbr/>Result</span></a></div></details></div></details></div>
<div><a href="#ghidraclientoptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Reference"><use href="../assets/icons.svg#icon-4194304"></use></svg><span>Ghidra<wbr/>Client<wbr/>Options</span></a><a href="#ghidradiagnostic"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Reference"><use href="../assets/icons.svg#icon-4194304"></use></svg><span>Ghidra<wbr/>Diagnostic</span></a><a href="#ghidrarequestoptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Reference"><use href="../assets/icons.svg#icon-4194304"></use></svg><span>Ghidra<wbr/>Request<wbr/>Options</span></a><a href="#ghidrastartresult"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Reference"><use href="../assets/icons.svg#icon-4194304"></use></svg><span>Ghidra<wbr/>Start<wbr/>Result</span></a></div></details></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">

View File

@ -11,7 +11,7 @@
<li><a href="" aria-current="page">ghidra/GhidraClientTypes</a></li></ul>
<h1>Module ghidra/GhidraClientTypes</h1></div>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Interfaces"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="interfaces">Interfaces<a href="#interfaces" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraclientoptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><a href="../interfaces/ghidra_GhidraClientTypes.GhidraClientOptions.html">GhidraClientOptions</a><a href="#ghidraclientoptions" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<h2 class="tsd-anchor-link" id="interfaces">Interfaces<a href="#interfaces" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraclientoptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><a href="../interfaces/ghidra_GhidraClientTypes.GhidraClientOptions.html">GhidraClientOptions</a><a href="#ghidraclientoptions" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidrarequestoptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><a href="../interfaces/ghidra_GhidraClientTypes.GhidraRequestOptions.html">GhidraRequestOptions</a><a href="#ghidrarequestoptions" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="type-aliases">Type Aliases<a href="#type-aliases" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidradiagnostic"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_GhidraClientTypes.GhidraDiagnostic.html">GhidraDiagnostic</a><a href="#ghidradiagnostic" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidrastartresult"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_GhidraClientTypes.GhidraStartResult.html">GhidraStartResult</a><a href="#ghidrastartresult" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<div class="col-sidebar">
@ -29,7 +29,7 @@
<h3>On This Page</h3></summary>
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Interfaces"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Interfaces</summary>
<div><a href="#ghidraclientoptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><span>Ghidra<wbr/>Client<wbr/>Options</span></a></div></details>
<div><a href="#ghidraclientoptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><span>Ghidra<wbr/>Client<wbr/>Options</span></a><a href="#ghidrarequestoptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><span>Ghidra<wbr/>Request<wbr/>Options</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Type Aliases</summary>
<div><a href="#ghidradiagnostic"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Diagnostic</span></a><a href="#ghidrastartresult"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Start<wbr/>Result</span></a></div></details></div></details></div>
<div class="site-menu">

View File

@ -0,0 +1,44 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ghidra/GhidraInventoryValues | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="" aria-current="page">ghidra/GhidraInventoryValues</a></li></ul>
<h1>Module ghidra/GhidraInventoryValues</h1></div>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="type-aliases">Type Aliases<a href="#type-aliases" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidrainventoryoperation"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_GhidraInventoryValues.GhidraInventoryOperation.html">GhidraInventoryOperation</a><a href="#ghidrainventoryoperation" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="variables">Variables<a href="#variables" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidra_inventory_operations"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><a href="../variables/ghidra_GhidraInventoryValues.GHIDRA_INVENTORY_OPERATIONS.html">GHIDRA_INVENTORY_OPERATIONS</a><a href="#ghidra_inventory_operations" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="functions">Functions<a href="#functions" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="isghidrainventoryoperation"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><a href="../functions/ghidra_GhidraInventoryValues.isGhidraInventoryOperation.html">isGhidraInventoryOperation</a><a href="#isghidrainventoryoperation" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="parseghidrainventoryinput"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><a href="../functions/ghidra_GhidraInventoryValues.parseGhidraInventoryInput.html">parseGhidraInventoryInput</a><a href="#parseghidrainventoryinput" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="parseghidrainventoryresult"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><a href="../functions/ghidra_GhidraInventoryValues.parseGhidraInventoryResult.html">parseGhidraInventoryResult</a><a href="#parseghidrainventoryresult" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-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>
<h3>On This Page</h3></summary>
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Type Aliases</summary>
<div><a href="#ghidrainventoryoperation"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Inventory<wbr/>Operation</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Variables</summary>
<div><a href="#ghidra_inventory_operations"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><span>GHIDRA_<wbr/>INVENTORY_<wbr/>OPERATIONS</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Functions</summary>
<div><a href="#isghidrainventoryoperation"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><span>is<wbr/>Ghidra<wbr/>Inventory<wbr/>Operation</span></a><a href="#parseghidrainventoryinput"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><span>parse<wbr/>Ghidra<wbr/>Inventory<wbr/>Input</span></a><a href="#parseghidrainventoryresult"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><span>parse<wbr/>Ghidra<wbr/>Inventory<wbr/>Result</span></a></div></details></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -12,6 +12,8 @@
<h1>Module ghidra/GhidraProvider</h1></div>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="classes">Classes<a href="#classes" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraprovider"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="../assets/icons.svg#icon-128"></use></svg><a href="../classes/ghidra_GhidraProvider.GhidraProvider.html">GhidraProvider</a><a href="#ghidraprovider" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="type-aliases">Type Aliases<a href="#type-aliases" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraproviderclientfactory"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_GhidraProvider.GhidraProviderClientFactory.html">GhidraProviderClientFactory</a><a href="#ghidraproviderclientfactory" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="variables">Variables<a href="#variables" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidra_provider_identity"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><a href="../variables/ghidra_GhidraProvider.GHIDRA_PROVIDER_IDENTITY.html">GHIDRA_PROVIDER_IDENTITY</a><a href="#ghidra_provider_identity" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ghidra_provider_tool_contracts"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><a href="../variables/ghidra_GhidraProvider.GHIDRA_PROVIDER_TOOL_CONTRACTS.html">GHIDRA_PROVIDER_TOOL_CONTRACTS</a><a href="#ghidra_provider_tool_contracts" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<div class="col-sidebar">
@ -30,6 +32,8 @@
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Classes</summary>
<div><a href="#ghidraprovider"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="../assets/icons.svg#icon-128"></use></svg><span>Ghidra<wbr/>Provider</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Type Aliases</summary>
<div><a href="#ghidraproviderclientfactory"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Provider<wbr/>Client<wbr/>Factory</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Variables</summary>
<div><a href="#ghidra_provider_identity"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><span>GHIDRA_<wbr/>PROVIDER_<wbr/>IDENTITY</span></a><a href="#ghidra_provider_tool_contracts"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><span>GHIDRA_<wbr/>PROVIDER_<wbr/>TOOL_<wbr/>CONTRACTS</span></a></div></details></div></details></div>
<div class="site-menu">

View File

@ -15,7 +15,9 @@
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Interfaces"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="interfaces">Interfaces<a href="#interfaces" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidrasessionerroroptions"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><a href="../interfaces/ghidra_GhidraSessionError.GhidraSessionErrorOptions.html">GhidraSessionErrorOptions</a><a href="#ghidrasessionerroroptions" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="type-aliases">Type Aliases<a href="#type-aliases" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidrasessionfailurekind"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_GhidraSessionError.GhidraSessionFailureKind.html">GhidraSessionFailureKind</a><a href="#ghidrasessionfailurekind" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<h2 class="tsd-anchor-link" id="type-aliases">Type Aliases<a href="#type-aliases" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidrasessionfailurekind"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_GhidraSessionError.GhidraSessionFailureKind.html">GhidraSessionFailureKind</a><a href="#ghidrasessionfailurekind" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="functions">Functions<a href="#functions" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="bindghidrasessionfailure"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><a href="../functions/ghidra_GhidraSessionError.bindGhidraSessionFailure.html">bindGhidraSessionFailure</a><a href="#bindghidrasessionfailure" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
@ -35,7 +37,9 @@
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Interfaces"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Interfaces</summary>
<div><a href="#ghidrasessionerroroptions"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Interface"><use href="../assets/icons.svg#icon-256"></use></svg><span>Ghidra<wbr/>Session<wbr/>Error<wbr/>Options</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Type Aliases</summary>
<div><a href="#ghidrasessionfailurekind"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Session<wbr/>Failure<wbr/>Kind</span></a></div></details></div></details></div>
<div><a href="#ghidrasessionfailurekind"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Session<wbr/>Failure<wbr/>Kind</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Functions</summary>
<div><a href="#bindghidrasessionfailure"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><span>bind<wbr/>Ghidra<wbr/>Session<wbr/>Failure</span></a></div></details></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">

View File

@ -12,6 +12,8 @@
<h1>Module ghidra/GhidraSessionValues</h1></div>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="type-aliases">Type Aliases<a href="#type-aliases" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidrasessioninfo"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_GhidraSessionValues.GhidraSessionInfo.html">GhidraSessionInfo</a><a href="#ghidrasessioninfo" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="variables">Variables<a href="#variables" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidra_session_capabilities"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><a href="../variables/ghidra_GhidraSessionValues.GHIDRA_SESSION_CAPABILITIES.html">GHIDRA_SESSION_CAPABILITIES</a><a href="#ghidra_session_capabilities" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="functions">Functions<a href="#functions" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="isghidrashutdownacknowledgement"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><a href="../functions/ghidra_GhidraSessionValues.isGhidraShutdownAcknowledgement.html">isGhidraShutdownAcknowledgement</a><a href="#isghidrashutdownacknowledgement" 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></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="parseghidrasessioninfo"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><a href="../functions/ghidra_GhidraSessionValues.parseGhidraSessionInfo.html">parseGhidraSessionInfo</a><a href="#parseghidrasessioninfo" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details></div>
<div class="col-sidebar">
@ -30,6 +32,8 @@
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Type Aliases</summary>
<div><a href="#ghidrasessioninfo"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Session<wbr/>Info</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Variables</summary>
<div><a href="#ghidra_session_capabilities"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><span>GHIDRA_<wbr/>SESSION_<wbr/>CAPABILITIES</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Functions</summary>
<div><a href="#isghidrashutdownacknowledgement"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><span>is<wbr/>Ghidra<wbr/>Shutdown<wbr/>Acknowledgement</span></a><a href="#parseghidrasessioninfo"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><span>parse<wbr/>Ghidra<wbr/>Session<wbr/>Info</span></a></div></details></div></details></div>
<div class="site-menu">

View File

@ -10,6 +10,8 @@
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="" aria-current="page">ghidra/protocol</a></li></ul>
<h1>Module ghidra/protocol</h1></div>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="classes">Classes<a href="#classes" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidraremoteerror"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="../assets/icons.svg#icon-128"></use></svg><a href="../classes/ghidra_protocol.GhidraRemoteError.html">GhidraRemoteError</a><a href="#ghidraremoteerror" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
<h2 class="tsd-anchor-link" id="type-aliases">Type Aliases<a href="#type-aliases" 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></h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="ghidrabridgeresponse"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><a href="../types/ghidra_protocol.GhidraBridgeResponse.html">GhidraBridgeResponse</a><a href="#ghidrabridgeresponse" 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></span></dt><dd class="tsd-member-summary"></dd></dl></details>
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
@ -28,6 +30,8 @@
<details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-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>
<h3>On This Page</h3></summary>
<div class="tsd-accordion-details">
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Classes</summary>
<div><a href="#ghidraremoteerror"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="../assets/icons.svg#icon-128"></use></svg><span>Ghidra<wbr/>Remote<wbr/>Error</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Type Aliases"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Type Aliases</summary>
<div><a href="#ghidrabridgeresponse"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Type Alias"><use href="../assets/icons.svg#icon-2097152"></use></svg><span>Ghidra<wbr/>Bridge<wbr/>Response</span></a></div></details>
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Functions</summary>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Closed provider operation names exposed by direct analysis adapters.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L338">src/contracts/toolContracts.ts:338</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L342">src/contracts/toolContracts.ts:342</a></li></ul></aside></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>Strict analyzed-function dossier shared by provider and comparison boundaries.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L213">src/domain/hopperValues.ts:213</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/domain/hopperValues.ts#L233">src/domain/hopperValues.ts:233</a></li></ul></aside></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>Safe lifecycle telemetry for one isolated Ghidra headless process.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L11">src/ghidra/GhidraClientTypes.ts:11</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraClientTypes.ts#L17">src/ghidra/GhidraClientTypes.ts:17</a></li></ul></aside></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -0,0 +1,35 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GhidraInventoryOperation | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraInventoryValues.html">ghidra/GhidraInventoryValues</a></li>
<li><a href="" aria-current="page">GhidraInventoryOperation</a></li></ul>
<h1>Type Alias GhidraInventoryOperation</h1></div>
<div class="tsd-signature"><span class="tsd-kind-type-alias">GhidraInventoryOperation</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">typeof</span> <a href="../variables/ghidra_GhidraInventoryValues.GHIDRA_INVENTORY_OPERATIONS.html" class="tsd-signature-type tsd-kind-variable">GHIDRA_INVENTORY_OPERATIONS</a><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">]</span></div>
<div class="tsd-comment tsd-typography"><p>One direct inventory operation implemented by the packaged Java bridge.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in src/ghidra/GhidraInventoryValues.ts:26</li></ul></aside></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GhidraProviderClientFactory | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraProvider.html">ghidra/GhidraProvider</a></li>
<li><a href="" aria-current="page">GhidraProviderClientFactory</a></li></ul>
<h1>Type Alias GhidraProviderClientFactory</h1></div>
<div class="tsd-signature"><span class="tsd-kind-type-alias">GhidraProviderClientFactory</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">:</span> <a href="../interfaces/ghidra_GhidraClientTypes.GhidraClientOptions.html" class="tsd-signature-type tsd-kind-interface">GhidraClientOptions</a><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">Pick</span><span class="tsd-signature-symbol">&lt;</span><a href="../classes/ghidra_GhidraClient.GhidraClient.html" class="tsd-signature-type tsd-kind-class">GhidraClient</a><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">&quot;start&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;callTool&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;close&quot;</span><span class="tsd-signature-symbol">&gt;</span></div>
<div class="tsd-comment tsd-typography"><p>Production seam for exercising provider projection without a real process.</p>
</div>
<div class="tsd-type-declaration">
<h4>Type Declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter-signature">
<ul class="tsd-signatures">
<li class="tsd-signature" id="__type"><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">:</span> <a href="../interfaces/ghidra_GhidraClientTypes.GhidraClientOptions.html" class="tsd-signature-type tsd-kind-interface">GhidraClientOptions</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">Pick</span><span class="tsd-signature-symbol">&lt;</span><a href="../classes/ghidra_GhidraClient.GhidraClient.html" class="tsd-signature-type tsd-kind-class">GhidraClient</a><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">&quot;start&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;callTool&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;close&quot;</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-description">
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li><span><span class="tsd-kind-parameter">options</span>: <a href="../interfaces/ghidra_GhidraClientTypes.GhidraClientOptions.html" class="tsd-signature-type tsd-kind-interface">GhidraClientOptions</a></span></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Pick</span><span class="tsd-signature-symbol">&lt;</span><a href="../classes/ghidra_GhidraClient.GhidraClient.html" class="tsd-signature-type tsd-kind-class">GhidraClient</a><span class="tsd-signature-symbol">,</span> <span class="tsd-signature-type">&quot;start&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;callTool&quot;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">&quot;close&quot;</span><span class="tsd-signature-symbol">&gt;</span></h4></li></ul></li></ul></div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L172">src/ghidra/GhidraProvider.ts:172</a></li></ul></aside></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Authenticated metadata produced after Ghidra finishes auto-analysis.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionValues.ts#L34">src/ghidra/GhidraSessionValues.ts:34</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionValues.ts#L48">src/ghidra/GhidraSessionValues.ts:48</a></li></ul></aside></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>Bounded workflows composed from one or more bridge operations.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L341">src/contracts/toolContracts.ts:341</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L345">src/contracts/toolContracts.ts:345</a></li></ul></aside></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>Bridge operations exposed without additional application composition.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L162">src/contracts/toolContracts.ts:162</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L166">src/contracts/toolContracts.ts:166</a></li></ul></aside></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>Target lifecycle tools available only on the long-lived MCP adapter.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L405">src/contracts/toolContracts.ts:405</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L409">src/contracts/toolContracts.ts:409</a></li></ul></aside></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>Complete ordered public inventory used by registration and verification.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L518">src/contracts/toolContracts.ts:518</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L522">src/contracts/toolContracts.ts:522</a></li></ul></aside></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>Caller observations used to compare a live server with expected identity.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L395">src/contracts/toolContracts.ts:395</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolContracts.ts#L399">src/contracts/toolContracts.ts:399</a></li></ul></aside></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>Exact Evidence v2 schemas for provider-neutral artifact graph operations.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L487">src/contracts/toolOutputSchemas.ts:487</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L523">src/contracts/toolOutputSchemas.ts:523</a></li></ul></aside></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>Exact structured-content schemas for composed analysis workflows.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L380">src/contracts/toolOutputSchemas.ts:380</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L416">src/contracts/toolOutputSchemas.ts:416</a></li></ul></aside></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>Exact Evidence v2 schemas for provider-neutral native inspection.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L478">src/contracts/toolOutputSchemas.ts:478</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L514">src/contracts/toolOutputSchemas.ts:514</a></li></ul></aside></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">

View File

@ -12,10 +12,10 @@
<li><a href="" aria-current="page">officialOutputSchemas</a></li></ul>
<h1>Variable officialOutputSchemas<code class="tsd-tag">Const</code></h1></div>
<div class="tsd-signature"><span class="tsd-kind-variable">officialOutputSchemas</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> <span class="tsd-signature-type">z.ZodObject</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> = ...</span></div>
<div class="tsd-comment tsd-typography"><p>Exact structured-content schemas for the direct Hopper operations.</p>
<div class="tsd-comment tsd-typography"><p>Exact structured-content schemas shared by direct analysis providers.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L327">src/contracts/toolOutputSchemas.ts:327</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L363">src/contracts/toolOutputSchemas.ts:363</a></li></ul></aside></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>Exact structured-content schemas for target lifecycle operations.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L493">src/contracts/toolOutputSchemas.ts:493</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/contracts/toolOutputSchemas.ts#L529">src/contracts/toolOutputSchemas.ts:529</a></li></ul></aside></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

View File

@ -11,7 +11,7 @@
<li><a href="../modules/ghidra_GhidraDefaults.html">ghidra/GhidraDefaults</a></li>
<li><a href="" aria-current="page">GHIDRA_BRIDGE_VERSION</a></li></ul>
<h1>Variable GHIDRA_BRIDGE_VERSION<code class="tsd-tag">Const</code></h1></div>
<div class="tsd-signature"><span class="tsd-kind-variable">GHIDRA_BRIDGE_VERSION</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">1</span></div>
<div class="tsd-signature"><span class="tsd-kind-variable">GHIDRA_BRIDGE_VERSION</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">2</span></div>
<div class="tsd-comment tsd-typography"><p>Version of REA's Java bridge handshake and request protocol.</p>
</div><aside class="tsd-sources">
<ul>

View File

@ -0,0 +1,35 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GHIDRA_INVENTORY_OPERATIONS | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraInventoryValues.html">ghidra/GhidraInventoryValues</a></li>
<li><a href="" aria-current="page">GHIDRA_INVENTORY_OPERATIONS</a></li></ul>
<h1>Variable GHIDRA_INVENTORY_OPERATIONS<code class="tsd-tag">Const</code></h1></div>
<div class="tsd-signature"><span class="tsd-kind-variable">GHIDRA_INVENTORY_OPERATIONS</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-symbol">[</span><br/>    <span class="tsd-signature-type">&quot;address_name&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_documents&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_names&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_procedures&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_segments&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_strings&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;procedure_address&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;search_procedures&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;search_strings&quot;</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol"> = ...</span></div>
<div class="tsd-comment tsd-typography"><p>Read-only direct operations admitted by the Ghidra v1 adapter.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in src/ghidra/GhidraInventoryValues.ts:12</li></ul></aside></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -15,7 +15,7 @@
<div class="tsd-comment tsd-typography"><p>Public identity committed by every Ghidra-backed observation.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L42">src/ghidra/GhidraProvider.ts:42</a></li></ul></aside></div>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraProvider.ts#L53">src/ghidra/GhidraProvider.ts:53</a></li></ul></aside></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

View File

@ -0,0 +1,35 @@
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GHIDRA_SESSION_CAPABILITIES | rea-agents - v1.6.0</title><meta name="description" content="Documentation for rea-agents"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container"><a href="../index.html" class="title">rea-agents - v1.6.0</a>
<div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/>
<ul role="listbox" id="tsd-search-results"></ul>
<div id="tsd-search-status" aria-live="polite" aria-atomic="true">
<div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
<li><a href="../modules/ghidra_GhidraSessionValues.html">ghidra/GhidraSessionValues</a></li>
<li><a href="" aria-current="page">GHIDRA_SESSION_CAPABILITIES</a></li></ul>
<h1>Variable GHIDRA_SESSION_CAPABILITIES<code class="tsd-tag">Const</code></h1></div>
<div class="tsd-signature"><span class="tsd-kind-variable">GHIDRA_SESSION_CAPABILITIES</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-keyword">readonly</span> <span class="tsd-signature-symbol">[</span><br/>    <span class="tsd-signature-type">&quot;ping&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;shutdown&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;address_name&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_documents&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_names&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_procedures&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_segments&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;list_strings&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;procedure_address&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;resolve_containing_procedure&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;search_procedures&quot;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-signature-type">&quot;search_strings&quot;</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol"> = ...</span></div>
<div class="tsd-comment tsd-typography"><p>Exact methods proved by the bridge handshake after auto-analysis.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/morluto/rea/blob/main/src/ghidra/GhidraSessionValues.ts#L9">src/ghidra/GhidraSessionValues.ts:9</a></li></ul></aside></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-accordion"><summary class="tsd-accordion-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>
<h3>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div>
<div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html">rea-agents - v1.6.0</a>
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
<li>Loading...</li></ul></nav></div></div></div><footer>
<p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer>
<div class="overlay"></div></body></html>

View File

@ -8,7 +8,7 @@ graph TD
subgraph "Adapters"
SERVER["src/server/<br/>MCP request translation<br/>createServer, tool registration, toolResult"]
HOPPER_BRIDGE["bridge/hopper_bridge.py<br/>Runs inside Hopper<br/>adapts operations to Hopper Python API"]
GHIDRA_BRIDGE["bridge/ghidra/ReaGhidraBridge.java<br/>Packaged HeadlessScript<br/>private authenticated control channel"]
GHIDRA_BRIDGE["bridge/ghidra/ReaGhidraBridge.java<br/>Packaged HeadlessScript<br/>authenticated read-only inventory"]
INSTALL["Host installation adapters<br/>macOS: verified vendor DMG to ~/Applications<br/>Linux: verified vendor package + apt/dnf/pacman"]
end
@ -21,7 +21,7 @@ graph TD
subgraph "Provider Layers"
HOPPER["src/hopper/<br/>Hopper launch & Unix-socket protocol<br/>BridgeLauncher, HopperClient, protocol"]
GHIDRA["src/ghidra/<br/>Ghidra discovery, profile & private headless session<br/>launcher, client, doctor, protocol"]
GHIDRA["src/ghidra/<br/>Ghidra discovery, profile & inventory operations<br/>launcher, client, doctor, protocol"]
AUX["src/artifacts/ + src/native/<br/>disjoint artifact and native capabilities"]
BROWSER["src/browser/<br/>Loopback CDP transport<br/>exact-origin passive observation"]
end

View File

@ -68,10 +68,11 @@ desktop display. Unattended package-manager access requires
## Ghidra
REA's initial Ghidra provider layer is bring-your-own and currently supports
Linux x64 with the exact official Ghidra 12.1.2 release and a 64-bit full JDK 21. It supplies discovery, analysis-profile commitment, and an isolated
read-only headless session; it intentionally declares no binary-analysis
operations yet.
REA's Ghidra provider is bring-your-own and currently supports Linux x64 with
the exact official Ghidra 12.1.2 release and a 64-bit full JDK 21. It supplies
discovery, analysis-profile commitment, an isolated read-only headless session,
and ten bounded inventory/name/search operations. Decompilation, calls, xrefs,
GUI state, and analysis mutations remain unavailable through Ghidra.
Extract Ghidra and install the JDK outside REA, then export absolute paths:
@ -96,6 +97,13 @@ per-file analysis timeout, CPU and heap bounds, and its packaged Java bridge via
and descriptor are current-user-only, and all owned runtime paths and processes
are removed on every terminal lifecycle path.
Operations begin only after default auto-analysis completes. A timeout fails
the open rather than exposing partial analysis. One session contains exactly
one imported Program; use `provider_id: "ghidra"`, `--provider ghidra`, or
`REA_ANALYSIS_PROVIDER=ghidra` when both Hopper and Ghidra support the target.
Run `GHIDRA_INSTALL_DIR=... npm run verify:ghidra` from a source checkout to
compile and analyze the source-owned debug and stripped conformance fixtures.
## Diagnose, update, and remove
`rea doctor --json` is strictly read-only. `rea upgrade` updates only the npm installation that owns the running CLI. `rea uninstall` removes only REA-owned agent registrations and skill files; `--purge-data` additionally removes REA cache and state paths.

View File

@ -141,7 +141,18 @@
"id": "ghidra",
"name": "Ghidra",
"version": null,
"capabilities": []
"capabilities": [
"address_name",
"list_documents",
"list_names",
"list_procedures",
"list_segments",
"list_strings",
"procedure_address",
"resolve_containing_procedure",
"search_procedures",
"search_strings"
]
},
{
"id": "hopper",
@ -412,10 +423,10 @@
"mcp_resource_templates": 7
},
"digests": {
"tools_sha256": "4babed9cb04300aa302d45de352c0401f7d9f5cb59e7bcb7e16c305172f4b7e7",
"tools_sha256": "8ca80bad31cd3f843b020fbef3c4b7da589e74345a2c7eec5edf18bd7f5f3bda",
"prompts_sha256": "cb1a0316708d1bdb5f4325c2000e466211b16070af8c927bc201340301f194c4",
"resources_sha256": "e603aad57a79479004fbdc267644092e8365dd64d94ad772b9da4425a49abd73",
"combined_sha256": "33c6be9777325d74209679f624e94a042092b275a10018d42c6d9a231ef8a473"
"combined_sha256": "8a3d3b22fdecc75a773dc2f6aba201ac9c61d4fdd69d341933a211410f72ccb3"
}
}
}

View File

@ -1,20 +1,22 @@
# Static-analysis provider evaluation
Status: the Ghidra provider foundation is shipped. It validates an exact
bring-your-own Ghidra 12.1.2/JDK 21 environment on Linux x64, resolves a
provider/version/profile commitment, and runs one isolated read-only headless
import with an authenticated post-analysis bridge. It intentionally publishes
no binary operation capabilities yet.
Status: the Ghidra read-only inventory provider is shipped. It validates an
exact bring-your-own Ghidra 12.1.2/JDK 21 environment on Linux x64, resolves a
provider/version/profile commitment, runs one isolated read-only headless
import, and publishes ten operation-level capabilities after the authenticated
post-analysis handshake.
The provider-neutral target, provider registry, deterministic target binding,
analysis-profile commitment, Evidence provenance, snapshot v2, and bounded
provider-process lifecycle foundations are implemented. The Ghidra launcher,
packaged Java bridge, doctor/setup projection, bounded client lifecycle, and
single-target real Linux verifier are also implemented. Binary inventory and
function semantics remain gated on operation adapters and a multi-fixture
conformance suite. A provider is not a drop-in replacement for Hopper: every
capability must be mapped explicitly, with truthful `unavailable` or degraded
results where the engine cannot provide equivalent semantics.
multi-target real Linux verifier are also implemented. Program identity,
procedure/string/symbol inventory, memory blocks, address/name and
containing-procedure resolution, and bounded search are admitted. Function
details, decompilation, calls, xrefs, and CFG remain gated on later operation
adapters. A provider is not a drop-in replacement for Hopper: every capability
is mapped explicitly, with truthful `unavailable` or degraded results where the
engine cannot provide equivalent semantics.
[ADR-0001](adr/0001-provider-selection-and-analysis-profiles.md) fixes the
provider registry, deterministic selection, target binding, analysis profile,
@ -32,9 +34,9 @@ follow.
bounded startup/analysis/request deadlines, cancellation, and cleanup.
- Prefer a packaged Java bridge loaded through Ghidra's script path. PyGhidra
remains useful for prototypes but is not a mandatory production dependency.
- The foundation bridge exposes authenticated `ping` and `shutdown` only.
Successful auto-analysis is lifecycle proof, not an inventory, xref, CFG, or
decompilation claim.
- Treat authenticated `ping` and `shutdown` as lifecycle proof only. Inventory,
xref, CFG, and decompilation claims require separately admitted operation
contracts and real-provider conformance.
- Implement read-only inventories, assembly, decompilation, function metadata,
calls, references, containment, and bounded search first.
- Report GUI cursor/navigation and persistent mutation operations as unavailable
@ -59,14 +61,35 @@ two CPUs, and a 2 GiB heap; inherited Java option injection variables are
cleared. The mode-0600 descriptor carries the random token without exposing it
in argv or environment. The Java bridge deletes the descriptor after parsing,
binds a mode-0600 Unix socket, reports actual Ghidra/language/compiler/analysis
metadata, accepts only bounded authenticated `ping`/`shutdown`, and deletes the
socket. Close, cancellation, timeout, malformed protocol, or process exit stops
the token-verified owned process group and removes the entire runtime root.
metadata, accepts only the exact authenticated `ping`, `shutdown`, and ten
inventory methods, and deletes the socket. Close, cancellation, timeout,
malformed protocol, or process exit stops the token-verified owned process
group and removes the entire runtime root.
The provider catalog therefore lists `ghidra` with an empty capability array.
This is deliberate: provider discovery and a real headless lifecycle are
shipped, while binary operation semantics remain unavailable rather than being
borrowed from Hopper or inferred from a successful import.
The provider catalog lists only the ten proved Ghidra operations. GUI cursor,
mutation, decompilation, assembly, call, xref, and CFG operations are absent;
the router therefore reports them unavailable instead of borrowing Hopper
semantics or inferring capability from a successful import.
## Admitted inventory semantics
| Concern | Ghidra contract |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Program identity | One `analyzeHeadless` import produces exactly one Program; `list_documents` therefore returns exactly one name. |
| Addresses | Default memory uses lowercase `0x` hexadecimal. Non-default and external spaces use `<percent-encoded-space>:0x<hex>` and remain round-trippable. The handshake commits image base and default address-space name. |
| Symbols | `list_names` includes address-bearing memory and external symbols, including dynamic symbols, while excluding variable and no-address namespace records. Each item reports primary, dynamic, external, symbol type, and source facts. |
| Procedures | Both non-external and external functions are listed. A local thunk remains distinct from its resolved target; exact and qualified name lookup fails on ambiguity rather than guessing. |
| Strings | Only Ghidra-defined string `Data` is observed. Items report charset, byte length, and whether a required null terminator is missing. The API cannot distinguish a present terminator from fixed/Pascal layouts when no terminator is missing, so that state is named `present_or_not_required`. |
| Memory | Memory-block end addresses are exclusive. Read/write/execute, initialization, overlay, address space, and image base are direct Ghidra observations. |
| Pagination | List limits are 500 and search limits are 100. Pages commit exact totals and advancing offsets; an inventory above one million items fails rather than returning a partial result labeled exhaustive. |
| Search | Literal search scans the immutable inventory with a 1,000,000-unit cumulative work budget. Regex uses a conservative finite Java-regex subset with 10,000 static paths, 4,096 UTF-16 code units per candidate, and the same cumulative budget. Exceeding a budget fails explicitly; returned values identify truncation. |
| Analysis state | The socket is exposed only after default auto-analysis. A 300-second analysis timeout fails target opening; established requests have a 10-second client deadline and a 1 MiB response ceiling. |
`npm run verify:ghidra` compiles the versioned C oracle into separate debug and
stripped ELF binaries. It proves all ten operations, external functions,
resolved thunks, primary symbols, stripped-name behavior, strings, permissions,
bounded search, exact pagination, profile identity, and process/project cleanup
against real Ghidra 12.1.2. Unit fixtures separately reject malformed output.
## Shared provider-process foundation
@ -88,7 +111,7 @@ only the generic process mechanisms.
| Provider | License / automation surface | What it brings | REA fit and blockers |
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Ghidra](https://github.com/NationalSecurityAgency/ghidra) | Apache-2.0 source license; `analyzeHeadless`, Java APIs, and PyGhidra | Broad static analysis, many processors and formats, scripting, and project/database workflows | Foundation shipped: exact BYO installation checks, isolated project/state, bounded owned process, packaged Java bridge, and real lifecycle verifier. Operation schemas and semantic conformance remain before it is a full Hopper alternative. |
| [Ghidra](https://github.com/NationalSecurityAgency/ghidra) | Apache-2.0 source license; `analyzeHeadless`, Java APIs, and PyGhidra | Broad static analysis, many processors and formats, scripting, and project/database workflows | Read-only inventory shipped: exact BYO checks, isolated state, bounded process, packaged bridge, ten admitted operations, and real debug/stripped conformance. Function analysis remains before it is a broader Hopper alternative. |
| [Rizin](https://github.com/rizinorg/rizin) / [rz-pipe](https://github.com/rizinorg/rz-pipe) | Rizin repository contains LGPL-3.0 and GPL-3.0 components; `rizin`, `rz-bin`, and language bridges through `rzpipe` | Portable CLI analysis, disassembly/debugging, many architectures and file formats, JSON command output | Good candidate for a process-backed Linux provider and fast metadata fallback. License/component inventory must be preserved; command output needs version-pinned parsers and semantic conformance before evidence is trusted. |
| [LIEF](https://github.com/lief-project/LIEF) | Apache-2.0; C++, Python, and other bindings | Deterministic parsing and modification of ELF, PE, Mach-O, COFF, and related executable formats; headers, sections, symbols, relocations, and functions | Best near-term complement, not a decompiler replacement. It can cover format metadata and artifact evidence without a long-lived analysis process; function semantics, pseudocode, CFG, and cross-reference parity remain out of scope unless separately demonstrated. |
| [Binary Ninja](https://docs.binary.ninja/dev/index.html) | API/documentation components are MIT, while the analysis product is licensed by edition; commercial, Ultimate, or Headless license is required for headless automation | Python/Core/C++/Rust APIs, headless loading, IL layers, function analysis, plugins, and configurable analysis | Strong technical fit for a native provider, especially function dossiers. Commercial licensing, license-secret handling, native runtime packaging, and multithreaded lifecycle rules are material deployment blockers. |
@ -97,8 +120,8 @@ only the generic process mechanisms.
1. Use the implemented explicit provider registry and target binding without
changing Hopper behavior.
2. Extend the bounded read-only Ghidra foundation with capabilities admitted
individually through the shared conformance corpus.
2. Extend the admitted Ghidra inventory boundary with function capabilities
admitted individually through the shared conformance corpus.
3. Connect Electron/native-add-on application findings to the selected native
analysis provider without introducing provider-prefixed tools.
4. Evaluate LIEF or Rizin later as complementary metadata/disassembly providers,

View File

@ -13,18 +13,19 @@ The Ghidra foundation supports Linux x64 with exact Ghidra 12.1.2 and a 64-bit
full JDK 21. Doctor validates those coordinates; approved setup propagates them
to MCP registrations without installing or modifying either dependency. REA's
packaged Java bridge then proves an isolated read-only headless import,
post-analysis handshake, and complete cleanup. The provider intentionally
declares no binary operation capabilities in this foundation release.
post-analysis handshake, complete cleanup, and ten admitted read-only inventory
operations. Real source-owned debug and stripped ELF fixtures cover program,
procedure, string, symbol, external/thunk, memory, resolution, and search
semantics.
## Next Ghidra milestone
Admit Ghidra read-only capabilities individually: start with program identity,
procedures, strings, symbols, memory blocks, address/name resolution, and
bounded search; then add function details, decompilation, assembly, calls, xrefs,
and CFG. Every claim requires normalized provider-neutral semantics and real
source-owned conformance. Hopper and Ghidra pseudocode text is not expected to
match. Automatic Ghidra acquisition, if ever added, remains a separately
planned and approved related-tool change; setup must never install Java.
Extend the admitted inventory boundary with function details, decompilation,
assembly, calls, xrefs, and CFG. Every claim requires normalized
provider-neutral semantics and real source-owned conformance. Hopper and Ghidra
pseudocode text is not expected to match. Automatic Ghidra acquisition, if ever
added, remains a separately planned and approved related-tool change; setup
must never install Java.
## Capability-selective setup

View File

@ -1,25 +1,30 @@
#!/usr/bin/env node
import { access } from "node:fs/promises";
import { isAbsolute } from "node:path";
import { execFile } from "node:child_process";
import { access, mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { isAbsolute, join } from "node:path";
import { fileURLToPath } from "node:url";
import { promisify } from "node:util";
import { resolveGhidraAnalysisProfile } from "../dist/ghidra/GhidraAnalysisProfile.js";
import { GhidraClient } from "../dist/ghidra/GhidraClient.js";
import { parseGhidraInventoryResult } from "../dist/ghidra/GhidraInventoryValues.js";
import {
inspectGhidraInstallation,
SUPPORTED_GHIDRA_VERSION,
} from "../dist/ghidra/GhidraInstallation.js";
import { GhidraHeadlessLauncher } from "../dist/ghidra/GhidraLauncher.js";
import { GHIDRA_PROVIDER_IDENTITY } from "../dist/ghidra/GhidraProvider.js";
import { GHIDRA_SESSION_CAPABILITIES } from "../dist/ghidra/GhidraSessionValues.js";
import { parseBinaryTarget } from "../dist/domain/binaryTarget.js";
const exec = promisify(execFile);
const installDir = process.env.GHIDRA_INSTALL_DIR;
if (installDir === undefined || !isAbsolute(installDir))
throw new Error(
"Set GHIDRA_INSTALL_DIR to the absolute root of an extracted Ghidra 12.1.2 release.",
);
const targetPath = process.env.GHIDRA_TARGET_PATH ?? "/usr/bin/true";
const installation = inspectGhidraInstallation({
installDir,
...(process.env.JAVA_HOME === undefined
@ -32,76 +37,390 @@ if (!installation.available || installation.analyzeHeadlessPath === null)
);
if (installation.providerVersion !== SUPPORTED_GHIDRA_VERSION)
throw new Error("Ghidra provider version commitment drifted");
const parsedTarget = await parseBinaryTarget(targetPath);
if (!parsedTarget.ok) throw parsedTarget.error;
const profile = await resolveGhidraAnalysisProfile(
parsedTarget.value,
GHIDRA_PROVIDER_IDENTITY,
installation,
const fixtureRoot = await mkdtemp(join(tmpdir(), "rea-ghidra-fixtures-"));
const sourcePath = fileURLToPath(
new URL("../tests/conformance/ghidra/inventory.c", import.meta.url),
);
if (!profile.ok || profile.value.profile === null)
throw new Error("Ghidra analysis profile could not be committed");
const client = new GhidraClient({
launcher: new GhidraHeadlessLauncher({
analyzeHeadlessPath: installation.analyzeHeadlessPath,
...(process.env.JAVA_HOME === undefined
? {}
: { javaHome: process.env.JAVA_HOME }),
bridgeScriptPath: fileURLToPath(
new URL("../bridge/ghidra/ReaGhidraBridge.java", import.meta.url),
),
}),
targetPath: parsedTarget.value.path,
providerVersion: SUPPORTED_GHIDRA_VERSION,
profileDigest: profile.value.profile.digest,
});
let runtimeCoordinates;
let observedSession;
const debugPath = join(fixtureRoot, "rea-ghidra-inventory-debug");
const strippedPath = join(fixtureRoot, "rea-ghidra-inventory-stripped");
const compiler = process.env.REA_CC ?? "cc";
try {
const started = await client.start();
if (!started.ok) throw started.error;
assertSession(started.value, profile.value.profile.digest);
const pinged = await client.ping();
if (!pinged.ok) throw pinged.error;
assertSession(pinged.value, profile.value.profile.digest);
observedSession = pinged.value;
runtimeCoordinates = client.diagnostics();
for (const name of ["runtime_root", "socket_path", "project_root"])
if (typeof runtimeCoordinates[name] !== "string")
throw new Error(`Ghidra verifier did not observe ${name}`);
if (typeof runtimeCoordinates.process_id !== "number")
throw new Error("Ghidra verifier did not observe its process ID");
const common = ["-O0", "-g", "-fno-inline", "-fno-pie", "-no-pie"];
await exec(compiler, [...common, sourcePath, "-o", debugPath]);
await exec(compiler, [...common, "-s", sourcePath, "-o", strippedPath]);
const debug = await verifyTarget(debugPath, "debug");
const stripped = await verifyTarget(strippedPath, "stripped");
assertDebugFixture(debug);
assertStrippedFixture(stripped);
const customPath = process.env.GHIDRA_TARGET_PATH;
const custom =
customPath === undefined ? null : await verifyTarget(customPath, "custom");
process.stdout.write(
`${JSON.stringify({
ok: true,
provider: { id: "ghidra", version: SUPPORTED_GHIDRA_VERSION },
fixture_source: sourcePath,
fixtures: [summary(debug), summary(stripped)],
custom_target: custom === null ? null : summary(custom),
cleanup: "complete",
})}\n`,
);
} finally {
await client.close();
await rm(fixtureRoot, { recursive: true, force: true });
}
if (runtimeCoordinates === undefined)
throw new Error("Ghidra runtime coordinates were not captured");
if (observedSession === undefined)
throw new Error("Ghidra session metadata was not captured");
for (const name of ["runtime_root", "socket_path", "project_root"]) {
const path = runtimeCoordinates[name];
if (typeof path === "string" && (await exists(path)))
throw new Error(`Ghidra cleanup left ${name}: ${path}`);
}
const pid = runtimeCoordinates.process_id;
if (typeof pid === "number" && processExists(pid))
throw new Error(`Ghidra cleanup left process ${String(pid)}`);
async function verifyTarget(targetPath, variant) {
const parsedTarget = await parseBinaryTarget(targetPath);
if (!parsedTarget.ok) throw parsedTarget.error;
const profile = await resolveGhidraAnalysisProfile(
parsedTarget.value,
GHIDRA_PROVIDER_IDENTITY,
installation,
);
if (!profile.ok || profile.value.profile === null)
throw new Error("Ghidra analysis profile could not be committed");
process.stdout.write(
`${JSON.stringify({
ok: true,
provider: { id: "ghidra", version: SUPPORTED_GHIDRA_VERSION },
target_path: parsedTarget.value.path,
target_sha256: parsedTarget.value.sha256,
analysis_profile_digest: profile.value.profile.digest,
language_id: observedSession.target.language_id,
compiler_spec_id: observedSession.target.compiler_spec_id,
cleanup: "complete",
})}\n`,
);
const client = new GhidraClient({
launcher: new GhidraHeadlessLauncher({
analyzeHeadlessPath: installation.analyzeHeadlessPath,
...(process.env.JAVA_HOME === undefined
? {}
: { javaHome: process.env.JAVA_HOME }),
bridgeScriptPath: fileURLToPath(
new URL("../bridge/ghidra/ReaGhidraBridge.java", import.meta.url),
),
}),
targetPath: parsedTarget.value.path,
providerVersion: SUPPORTED_GHIDRA_VERSION,
profileDigest: profile.value.profile.digest,
});
let runtimeCoordinates;
try {
const started = await client.start();
if (!started.ok) throw started.error;
assertSession(started.value, profile.value.profile.digest);
const pinged = await client.ping();
if (!pinged.ok) throw pinged.error;
assertSession(pinged.value, profile.value.profile.digest);
runtimeCoordinates = client.diagnostics();
assertRuntimeCoordinates(runtimeCoordinates);
const documents = await call(client, "list_documents", {});
const segments = await call(client, "list_segments", { document: null });
const procedures = await allItems(client, "list_procedures", {
document: null,
});
const names = await allItems(client, "list_names", {
document: null,
address: null,
});
const strings = await allItems(client, "list_strings", {
document: null,
address: null,
});
const probes =
variant === "custom"
? null
: await verifyInventoryOperations({
client,
variant,
procedures,
names,
strings,
});
return {
variant,
target: parsedTarget.value,
profile: profile.value.profile,
session: pinged.value,
documents,
segments,
procedures,
names,
strings,
probes,
};
} finally {
await client.close();
if (runtimeCoordinates !== undefined)
await assertCleanup(runtimeCoordinates);
}
}
async function verifyInventoryOperations({
client,
variant,
procedures,
names,
strings,
}) {
const rejections = await verifyBridgeRejections(client);
const stringSearch = await call(client, "search_strings", {
pattern: String.raw`^REA_GHIDRA_(?:INVENTORY_ENTRY|LEAF_VALUE)$`,
mode: "regex",
case_sensitive: true,
offset: 0,
limit: 100,
document: null,
});
if (stringSearch.total !== 2 || stringSearch.items.length !== 2)
throw new Error("Ghidra bounded regex string search drifted");
const stringItem = strings.find(
(item) => item.value === "REA_GHIDRA_INVENTORY_ENTRY",
);
if (stringItem === undefined)
throw new Error("Ghidra string probe address is unavailable");
const filteredStrings = await call(client, "list_strings", {
document: null,
address: stringItem.address,
offset: 0,
limit: 500,
});
if (
filteredStrings.total !== 1 ||
filteredStrings.items[0]?.address !== stringItem.address
)
throw new Error("Ghidra exact-address string filter drifted");
if (variant === "stripped")
return { rejections, stringSearch, filteredStrings };
const entry = findValue(procedures, "rea_ghidra_inventory_entry");
if (entry === undefined)
throw new Error("Ghidra entry procedure probe is unavailable");
const addressName = await call(client, "address_name", {
document: null,
address: entry.address,
});
if (symbolTail(addressName) !== "rea_ghidra_inventory_entry")
throw new Error("Ghidra primary address-name resolution drifted");
const resolvedAddress = await call(client, "procedure_address", {
document: null,
procedure: entry.value,
});
if (resolvedAddress !== entry.address)
throw new Error("Ghidra procedure-name resolution drifted");
const interior = `0x${(BigInt(entry.address) + 1n).toString(16)}`;
const containing = await call(client, "resolve_containing_procedure", {
document: null,
address: interior,
});
if (!containing.found || containing.procedure.address !== entry.address)
throw new Error("Ghidra containing-procedure resolution drifted");
const procedureSearch = await call(client, "search_procedures", {
pattern: "rea_ghidra_inventory_",
mode: "literal",
case_sensitive: true,
offset: 0,
limit: 1,
document: null,
});
if (
procedureSearch.total < 2 ||
procedureSearch.items.length !== 1 ||
!procedureSearch.has_more ||
procedureSearch.next_offset !== 1
)
throw new Error("Ghidra literal procedure-search pagination drifted");
const name = names.find((item) => item.address === entry.address);
if (name === undefined)
throw new Error("Ghidra entry name probe is unavailable");
const filteredNames = await call(client, "list_names", {
document: null,
address: entry.address,
offset: 0,
limit: 500,
});
if (
filteredNames.total < 1 ||
!filteredNames.items.some((item) => item.value === name.value)
)
throw new Error("Ghidra exact-address name filter drifted");
return {
rejections,
addressName,
resolvedAddress,
containing,
procedureSearch,
stringSearch,
filteredNames,
filteredStrings,
};
}
async function verifyBridgeRejections(client) {
return {
unknownDocument: await expectRemoteFailure(
client,
"list_segments",
{ document: "not-the-imported-program" },
"not_found",
),
malformedParameter: await expectRemoteFailure(
client,
"procedure_address",
{ document: null, procedure: 17 },
"invalid_request",
),
unboundedRegex: await expectRemoteFailure(
client,
"search_strings",
{
pattern: "a+",
mode: "regex",
case_sensitive: true,
offset: 0,
limit: 100,
document: null,
},
"invalid_request",
),
undeclaredMutation: await expectRemoteFailure(
client,
"set_comment",
{},
"method_unavailable",
),
};
}
async function expectRemoteFailure(client, operation, parameters, code) {
const result = await client.callTool(operation, parameters);
if (
result.ok ||
result.error.kind !== "remote" ||
result.error.remoteCode !== code ||
result.error.diagnostics.remote_code !== code
)
throw new Error(
`Ghidra ${operation} rejection drifted: ${JSON.stringify(result)}`,
);
return { operation, code };
}
async function call(client, operation, parameters) {
const called = await client.callTool(operation, parameters);
if (!called.ok) throw called.error;
const parsed = parseGhidraInventoryResult(operation, called.value);
if (!parsed.ok) throw parsed.error;
return parsed.value;
}
async function allItems(client, operation, parameters) {
const items = [];
let offset = 0;
let total;
while (true) {
const page = await call(client, operation, {
...parameters,
offset,
limit: 500,
});
if (typeof page !== "object" || page === null || Array.isArray(page))
throw new Error(`${operation} did not return a page`);
items.push(...page.items);
total ??= page.total;
if (page.total !== total)
throw new Error(`${operation} total changed during immutable paging`);
if (!page.has_more) break;
if (page.next_offset === null || page.next_offset <= offset)
throw new Error(`${operation} returned a non-advancing page`);
offset = page.next_offset;
}
if (items.length !== total)
throw new Error(`${operation} pagination was not exhaustive`);
return items;
}
function assertDebugFixture(observed) {
if (
!Array.isArray(observed.documents) ||
observed.documents.length !== 1 ||
!observed.documents[0].includes("debug")
)
throw new Error("Ghidra did not expose exactly one debug Program identity");
const entry = findValue(observed.procedures, "rea_ghidra_inventory_entry");
const leaf = findValue(observed.procedures, "rea_ghidra_inventory_leaf");
const external = observed.procedures.find(
(item) => item.procedure.external && symbolTail(item.value) === "puts",
);
if (entry === undefined || leaf === undefined || external === undefined)
throw new Error(
"Ghidra procedure inventory missed local or external functions",
);
if (
!observed.procedures.some(
(item) => item.procedure.thunk && item.procedure.thunk_target !== null,
)
)
throw new Error(
"Ghidra procedure inventory did not distinguish a resolved thunk",
);
const entryName = findValue(observed.names, "rea_ghidra_inventory_entry");
if (entryName === undefined || !entryName.symbol.primary)
throw new Error("Ghidra symbol inventory missed the primary entry symbol");
if (!observed.names.some((item) => item.symbol.external))
throw new Error("Ghidra symbol inventory missed external symbols");
assertStrings(observed.strings);
assertSegments(observed.segments, observed.session.target.image_base);
}
function assertStrippedFixture(observed) {
if (
observed.procedures.length === 0 ||
observed.names.length === 0 ||
findValue(observed.procedures, "rea_ghidra_inventory_entry") !== undefined
)
throw new Error(
"Stripped Ghidra fixture did not preserve stripped semantics",
);
assertStrings(observed.strings);
assertSegments(observed.segments, observed.session.target.image_base);
}
function assertStrings(strings) {
for (const expected of [
"REA_GHIDRA_INVENTORY_ENTRY",
"REA_GHIDRA_LEAF_VALUE",
]) {
const item = strings.find((candidate) => candidate.value === expected);
if (
item === undefined ||
item.value_truncated ||
typeof item.string.encoding !== "string" ||
item.string.byte_length < expected.length
)
throw new Error(`Ghidra string inventory missed ${expected}`);
}
}
function assertSegments(segments, imageBase) {
if (
!Array.isArray(segments) ||
segments.length === 0 ||
!segments.some((item) => item.executable) ||
!segments.some((item) => item.writable) ||
!segments.every(
(item) =>
item.permissions.available === true &&
item.permissions.source === "ghidra-memory-block" &&
item.image_base === imageBase,
)
)
throw new Error("Ghidra memory-block permissions or image base drifted");
}
function findValue(items, expected) {
return items.find((item) => symbolTail(item.value) === expected);
}
function symbolTail(value) {
if (typeof value !== "string") return undefined;
return value.split("::").at(-1);
}
function assertSession(session, expectedDigest) {
if (
@ -111,13 +430,50 @@ function assertSession(session, expectedDigest) {
session.read_only !== true ||
session.analysis_complete !== true ||
session.analysis_timed_out !== false ||
session.capabilities.join(",") !== "ping,shutdown"
session.capabilities.join(",") !== GHIDRA_SESSION_CAPABILITIES.join(",") ||
!/^0x[0-9a-f]+$/u.test(session.target.image_base) ||
session.target.default_address_space.length === 0
)
throw new Error(
`Ghidra session commitment drifted: ${JSON.stringify(session)}`,
);
}
function assertRuntimeCoordinates(coordinates) {
for (const name of ["runtime_root", "socket_path", "project_root"])
if (typeof coordinates[name] !== "string")
throw new Error(`Ghidra verifier did not observe ${name}`);
if (typeof coordinates.process_id !== "number")
throw new Error("Ghidra verifier did not observe its process ID");
}
async function assertCleanup(coordinates) {
for (const name of ["runtime_root", "socket_path", "project_root"]) {
const path = coordinates[name];
if (typeof path === "string" && (await exists(path)))
throw new Error(`Ghidra cleanup left ${name}: ${path}`);
}
const pid = coordinates.process_id;
if (typeof pid === "number" && processExists(pid))
throw new Error(`Ghidra cleanup left process ${String(pid)}`);
}
function summary(observed) {
return {
variant: observed.variant,
target_path: observed.target.path,
target_sha256: observed.target.sha256,
analysis_profile_digest: observed.profile.digest,
language_id: observed.session.target.language_id,
compiler_spec_id: observed.session.target.compiler_spec_id,
image_base: observed.session.target.image_base,
procedures: observed.procedures.length,
names: observed.names.length,
strings: observed.strings.length,
memory_blocks: observed.segments.length,
};
}
async function exists(path) {
try {
await access(path);

View File

@ -46,7 +46,11 @@ export type {
} from "./toolContractTypes.js";
const document = z.string().optional().describe("The document name");
const address = z.string().describe("A Hopper address");
const address = z
.string()
.describe(
"A provider-normalized address; default memory uses 0x-prefixed hexadecimal",
);
const optionalAddress = address.optional();
const procedure = z.string().describe("The procedure name or address");
const searchPattern = z
@ -162,7 +166,7 @@ const session = <Name extends string>(
export const OFFICIAL_TOOL_CONTRACTS = [
official(
"address_name",
"Resolve the analyzed name at a code or data address, defaulting to Hopper's current cursor. Use before following a symbol into xrefs; null means Hopper has no name at that address.",
"Resolve the primary analyzed name at a code or data address. Headless providers require an explicit address; GUI providers may default to their current cursor. Null means the provider has no primary name at that address.",
z.object({ document, address: optionalAddress }),
),
official(
@ -202,27 +206,27 @@ export const OFFICIAL_TOOL_CONTRACTS = [
),
official(
"list_documents",
"List all Hopper documents visible to the bridge. Use before set_current_document when a provider session contains multiple documents.",
"List provider program or document identities. Hopper may expose several documents; a Ghidra headless session contains exactly its one imported Program.",
z.object({}),
),
official(
"list_names",
"Page through analyzed names as address/value pairs. Results are bounded by offset and limit; follow next_offset until has_more is false before claiming exhaustive symbol coverage.",
"Page through analyzed memory and external symbols as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available; follow next_offset before claiming exhaustive coverage.",
z.object({ document, address: optionalAddress, ...pagination }),
),
official(
"list_procedures",
"Page through analyzed procedures as address/value pairs. Wait for Hopper analysis first, then follow next_offset for exhaustive coverage; use returned addresses with analyze_function or procedure_pseudo_code.",
"Page through analyzed procedures as address/value pairs after provider analysis. Ghidra metadata distinguishes thunks and external functions; follow next_offset for exhaustive coverage and use returned addresses in later function operations.",
z.object({ document, ...pagination }),
),
official(
"list_segments",
"List all segments and sections in the selected document. Hopper's public API does not expose permissions, so writable and executable are null with explicit capability metadata.",
"List segments or memory blocks using exclusive end addresses. Ghidra reports block permissions, address space, image base, initialization, and overlay facts; Hopper marks unavailable permissions explicitly.",
z.object({ document }),
),
official(
"list_strings",
"Page through analyzed strings, or filter to one address, as address/value pairs. Follow next_offset for exhaustive results and use xrefs on interesting string addresses.",
"Page through provider-defined strings, or filter to one address, as address/value pairs. Ghidra reports charset, missing-terminator status, byte length, and explicit value truncation; follow next_offset for exhaustive results.",
z.object({ document, address: optionalAddress, ...pagination }),
),
official(
@ -237,7 +241,7 @@ export const OFFICIAL_TOOL_CONTRACTS = [
),
official(
"procedure_address",
"Resolve a procedure symbol name or hexadecimal address to its entry address. Use this to canonicalize user-supplied identifiers before xrefs, assembly, or decompilation.",
"Resolve an unambiguous procedure symbol name or provider-normalized address to its canonical entry address. External address spaces remain explicit; use the result before xrefs, assembly, or decompilation.",
z.object({ procedure, document }),
),
official(
@ -279,17 +283,17 @@ export const OFFICIAL_TOOL_CONTRACTS = [
),
official(
"resolve_containing_procedure",
"Resolve an arbitrary address, including an xref source or interior instruction, to its Hopper-analyzed containing procedure. A negative result includes an explicit reason and is not guessed from nearby symbols.",
"Resolve an arbitrary address, including an interior instruction or exact external entry, to its provider-analyzed containing procedure. A negative result distinguishes outside segments from not in a procedure and is never guessed from nearby symbols.",
z.object({ address, document }),
),
official(
"search_procedures",
"Search analyzed procedure names using literal matching by default or regex opt-in. Regex rejects unsupported constructs, more than 10,000 static backtracking paths, candidates over 4,096 characters, and searches over 1,000,000 work units. Results are deterministic and offset-paginated.",
"Search analyzed procedure names using literal matching by default or regex opt-in. Ghidra bounds literal work and rejects regex constructs, paths, candidates, or cumulative work outside its finite budgets. Results are deterministic and offset-paginated.",
z.object(searchInput),
),
official(
"search_strings",
"Search analyzed strings using literal matching by default or regex opt-in. Regex rejects unsupported constructs, more than 10,000 static backtracking paths, candidates over 4,096 characters, and searches over 1,000,000 work units. Results are deterministic, offset-paginated, and explicitly truncated.",
"Search analyzed strings using literal matching by default or regex opt-in. Ghidra bounds literal work and rejects regex constructs, paths, candidates, or cumulative work outside its finite budgets. Results are deterministic, offset-paginated, and explicitly truncated.",
z.object(searchInput),
),
official(

View File

@ -254,6 +254,10 @@ const unavailable = z.object({
available: z.literal(false),
reason: z.string(),
});
const availableMemoryPermissions = z.object({
available: z.literal(true),
source: z.literal("ghidra-memory-block"),
});
const bounded = (item: z.ZodType) =>
z.object({
items: z.array(item),
@ -262,8 +266,36 @@ const bounded = (item: z.ZodType) =>
truncated: z.boolean(),
next_offset: z.number().int().min(0).nullable(),
});
const addressedValue = z.object({
address: z.string(),
value: z.string(),
value_truncated: z.boolean().optional(),
symbol: z
.object({
primary: z.boolean(),
dynamic: z.boolean(),
external: z.boolean(),
type: z.string(),
source: z.enum(["default", "analysis", "ai", "imported", "user_defined"]),
})
.optional(),
procedure: z
.object({
external: z.boolean(),
thunk: z.boolean(),
thunk_target: z.string().nullable(),
})
.optional(),
string: z
.object({
encoding: z.string(),
termination: z.enum(["missing", "present_or_not_required"]),
byte_length: z.number().int().min(0),
})
.optional(),
});
const pageOutput = z.object({
items: z.array(z.object({ address: z.string(), value: z.string() })),
items: z.array(addressedValue),
offset: z.number().int().min(0),
limit: z.number().int().min(1),
total: z.number().int().min(0),
@ -286,8 +318,12 @@ const memoryRegionOutput = z.object({
readable: z.boolean().nullable(),
writable: z.boolean().nullable(),
executable: z.boolean().nullable(),
permissions: unavailable,
provenance: z.literal("hopper-public-python-api"),
permissions: z.union([unavailable, availableMemoryPermissions]),
provenance: z.enum(["hopper-public-python-api", "ghidra-memory-block"]),
address_space: z.string().optional(),
image_base: z.string().optional(),
initialized: z.boolean().optional(),
overlay: z.boolean().optional(),
});
const segmentOutput = resultOf(
z.array(memoryRegionOutput.extend({ sections: z.array(memoryRegionOutput) })),
@ -323,7 +359,7 @@ const graphNode = z.discriminatedUnion("status", [
]);
const functionDossierOutput = resultOf(functionDossierSchema);
/** Exact structured-content schemas for the direct Hopper operations. */
/** Exact structured-content schemas shared by direct analysis providers. */
export const officialOutputSchemas: Readonly<Record<string, z.ZodObject>> = {
address_name: resultOf(nullableText),
comment: resultOf(nullableText),

View File

@ -24,9 +24,29 @@ export interface AddressedPage {
readonly hasMore: boolean;
}
/** Return the non-negative byte distance between hexadecimal addresses. */
export const addressDistance = (start: string, end: string): number =>
Math.max(0, Number.parseInt(end, 16) - Number.parseInt(start, 16));
/** Return a bounded byte distance between canonical addresses in one space. */
export const addressDistance = (start: string, end: string): number => {
const left = addressCoordinate(start);
const right = addressCoordinate(end);
if (left === null || right === null || left.space !== right.space) return 0;
const distance = right.offset - left.offset;
if (distance <= 0n) return 0;
return Number(
distance > BigInt(Number.MAX_SAFE_INTEGER)
? BigInt(Number.MAX_SAFE_INTEGER)
: distance,
);
};
const addressCoordinate = (
value: string,
): { readonly space: string; readonly offset: bigint } | null => {
const separator = value.lastIndexOf(":0x");
const space = separator < 0 ? "default" : value.slice(0, separator);
const offset = separator < 0 ? value : value.slice(separator + 1);
if (!/^0x[0-9a-f]+$/u.test(offset)) return null;
return { space, offset: BigInt(offset) };
};
const procedureMapSchema = z.record(z.string(), z.string());
const addressedNamesSchema = z.array(

View File

@ -21,13 +21,18 @@ import {
} from "./GhidraDefaults.js";
import type {
GhidraClientOptions,
GhidraRequestOptions,
GhidraStartResult,
} from "./GhidraClientTypes.js";
import type { GhidraInventoryOperation } from "./GhidraInventoryValues.js";
import { createGhidraDiagnostics } from "./GhidraDiagnostics.js";
import type { GhidraLaunch } from "./GhidraLauncher.js";
import { GhidraResponseBuffer } from "./GhidraResponseBuffer.js";
import { GhidraResponseRouter } from "./GhidraResponseRouter.js";
import { GhidraSessionError } from "./GhidraSessionError.js";
import {
bindGhidraSessionFailure,
GhidraSessionError,
} from "./GhidraSessionError.js";
import {
isGhidraShutdownAcknowledgement,
parseGhidraSessionInfo,
@ -44,6 +49,7 @@ const SESSION_ROOT = "/tmp";
export type {
GhidraClientOptions,
GhidraDiagnostic,
GhidraRequestOptions,
GhidraStartResult,
} from "./GhidraClientTypes.js";
@ -72,10 +78,14 @@ export class GhidraClient {
#startupController: AbortController | undefined;
#startPromise: Promise<GhidraStartResult> | undefined;
#closePromise: Promise<void> | undefined;
readonly #failure = bindGhidraSessionFailure(() => this.#diagnostics());
readonly #responseRouter = new GhidraResponseRouter({
pending: this.#pending,
nextId: () => this.#nextId,
remoteFailure: (message, cause) => this.#failure("remote", message, cause),
remoteFailure: (failure) =>
this.#failure("remote", failure.message, failure, {
remoteCode: failure.code,
}),
protocolFailure: (message, cause) => this.#abortProtocol(message, cause),
});
readonly #responseBuffer = new GhidraResponseBuffer({
@ -131,10 +141,7 @@ export class GhidraClient {
/** Revalidate live bridge, provider, run, and profile metadata. */
async ping(
options: {
readonly signal?: AbortSignal;
readonly timeoutMs?: number;
} = {},
options: GhidraRequestOptions = {},
): Promise<Result<GhidraSessionInfo, GhidraSessionError>> {
const started = await this.start(options.signal);
if (!started.ok) return started;
@ -143,6 +150,17 @@ export class GhidraClient {
return this.#parseSessionInfo(result.value);
}
/** Execute one admitted inventory operation after the exact session handshake. */
async callTool(
operation: GhidraInventoryOperation,
parameters: Readonly<Record<string, JsonValue>>,
options: GhidraRequestOptions = {},
): Promise<Result<JsonValue, GhidraSessionError>> {
const started = await this.start(options.signal);
if (!started.ok) return started;
return this.#request(operation, parameters, options);
}
/** Stop the owned process group and remove all project/runtime artifacts. */
close(): Promise<void> {
const starting = this.#startPromise;
@ -302,7 +320,7 @@ export class GhidraClient {
async #request(
method: string,
params: JsonValue,
options: { readonly signal?: AbortSignal; readonly timeoutMs?: number },
options: GhidraRequestOptions,
): Promise<Result<JsonValue, GhidraSessionError>> {
const socket = this.#socket;
const token = this.#token;
@ -351,9 +369,7 @@ export class GhidraClient {
return result;
}
#parseSessionInfo(
value: JsonValue,
): Result<GhidraSessionInfo, GhidraSessionError> {
#parseSessionInfo(value: JsonValue) {
const runId = this.#runId;
if (runId === undefined)
return err(this.#failure("protocol", "Ghidra run identity is missing"));
@ -362,15 +378,14 @@ export class GhidraClient {
providerVersion: this.#options.providerVersion,
profileDigest: this.#options.profileDigest,
});
return parsed.ok
? parsed
: err(
this.#failure(
"protocol",
"Ghidra bridge handshake is invalid",
parsed.error,
),
);
if (parsed.ok) return parsed;
return err(
this.#failure(
"protocol",
"Ghidra bridge handshake is invalid",
parsed.error,
),
);
}
async #close(
@ -496,20 +511,6 @@ export class GhidraClient {
});
}
#failure(
kind: GhidraSessionError["kind"],
message: string,
cause?: unknown,
options: { readonly timeoutMs?: number } = {},
): GhidraSessionError {
return new GhidraSessionError(kind, message, this.#diagnostics(), {
...(cause === undefined ? {} : { cause }),
...(options.timeoutMs === undefined
? {}
: { timeoutMs: options.timeoutMs }),
});
}
#diagnostics(): Readonly<Record<string, JsonValue>> {
const snapshot = this.#process?.snapshot() ?? this.#processSnapshot;
return createGhidraDiagnostics({

View File

@ -7,6 +7,12 @@ import type { GhidraSessionInfo } from "./GhidraSessionValues.js";
/** Result of opening and authenticating one headless Ghidra session. */
export type GhidraStartResult = Result<GhidraSessionInfo, GhidraSessionError>;
/** Cancellation and deadline controls shared by authenticated requests. */
export interface GhidraRequestOptions {
readonly signal?: AbortSignal;
readonly timeoutMs?: number;
}
/** Safe lifecycle telemetry for one isolated Ghidra headless process. */
export type GhidraDiagnostic =
| {

View File

@ -11,4 +11,4 @@ export const GHIDRA_REQUEST_TIMEOUT_MS = 10_000;
/** Maximum encoded response line accepted from the Java bridge. */
export const GHIDRA_MAX_LINE_BYTES = 1024 * 1024;
/** Version of REA's Java bridge handshake and request protocol. */
export const GHIDRA_BRIDGE_VERSION = 1;
export const GHIDRA_BRIDGE_VERSION = 2;

View File

@ -0,0 +1,243 @@
import { z } from "zod";
import { AnalysisInputError, AnalysisOutputError } from "../domain/errors.js";
import {
jsonObjectSchema,
jsonValueSchema,
type JsonValue,
} from "../domain/jsonValue.js";
import { err, ok, type Result } from "../domain/result.js";
/** Read-only direct operations admitted by the Ghidra v1 adapter. */
export const GHIDRA_INVENTORY_OPERATIONS = [
"address_name",
"list_documents",
"list_names",
"list_procedures",
"list_segments",
"list_strings",
"procedure_address",
"resolve_containing_procedure",
"search_procedures",
"search_strings",
] as const;
/** One direct inventory operation implemented by the packaged Java bridge. */
export type GhidraInventoryOperation =
(typeof GHIDRA_INVENTORY_OPERATIONS)[number];
const operationSet: ReadonlySet<string> = new Set(GHIDRA_INVENTORY_OPERATIONS);
/** Narrow an application operation to the Ghidra inventory surface. */
export const isGhidraInventoryOperation = (
operation: string,
): operation is GhidraInventoryOperation => operationSet.has(operation);
const boundedIdentifier = z.string().min(1).max(4096);
const document = boundedIdentifier.nullable().default(null);
const explicitAddress = boundedIdentifier;
const filteredAddress = explicitAddress.nullable().default(null);
const pagination = {
offset: z.number().int().min(0).default(0),
limit: z.number().int().min(1).max(500).default(100),
};
const searchInput = {
pattern: z.string().min(1).max(256),
mode: z.enum(["literal", "regex"]).default("literal"),
case_sensitive: z.boolean().default(false),
offset: z.number().int().min(0).default(0),
limit: z.number().int().min(1).max(100).default(100),
document,
};
const inputSchemas = {
address_name: z.object({ document, address: explicitAddress }).strict(),
list_documents: z.object({}).strict(),
list_names: z
.object({ document, address: filteredAddress, ...pagination })
.strict(),
list_procedures: z.object({ document, ...pagination }).strict(),
list_segments: z.object({ document }).strict(),
list_strings: z
.object({ document, address: filteredAddress, ...pagination })
.strict(),
procedure_address: z
.object({ document, procedure: boundedIdentifier })
.strict(),
resolve_containing_procedure: z
.object({ document, address: explicitAddress })
.strict(),
search_procedures: z.object(searchInput).strict(),
search_strings: z.object(searchInput).strict(),
} satisfies Readonly<Record<GhidraInventoryOperation, z.ZodType>>;
/** Validate and default one provider request before it crosses the socket. */
export const parseGhidraInventoryInput = (
operation: GhidraInventoryOperation,
value: Readonly<Record<string, JsonValue>>,
): Result<Readonly<Record<string, JsonValue>>, AnalysisInputError> => {
const parsed = inputSchemas[operation].safeParse(value);
if (!parsed.success)
return err(new AnalysisInputError(operation, { cause: parsed.error }));
return ok(jsonObjectSchema.parse(parsed.data));
};
const canonicalAddress = z
.string()
.regex(/^(?:0x[0-9a-f]+|(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:0x[0-9a-f]+)$/u);
const valueTruncation = { value_truncated: z.boolean() };
const symbolFacts = z
.object({
primary: z.boolean(),
dynamic: z.boolean(),
external: z.boolean(),
type: z.string().min(1),
source: z.enum(["default", "analysis", "ai", "imported", "user_defined"]),
})
.strict();
const procedureFacts = z
.object({
external: z.boolean(),
thunk: z.boolean(),
thunk_target: canonicalAddress.nullable(),
})
.strict();
const stringFacts = z
.object({
encoding: z.string().min(1),
termination: z.enum(["missing", "present_or_not_required"]),
byte_length: z.number().int().min(0),
})
.strict();
const baseItem = {
address: canonicalAddress,
value: z.string(),
...valueTruncation,
};
const symbolItem = z.object({ ...baseItem, symbol: symbolFacts }).strict();
const procedureItem = z
.object({ ...baseItem, procedure: procedureFacts })
.strict();
const stringItem = z.object({ ...baseItem, string: stringFacts }).strict();
const searchItem = z.object(baseItem).strict();
const pageSchema = <Item extends z.ZodType>(item: Item, maximumLimit: number) =>
z
.object({
items: z.array(item),
offset: z.number().int().min(0),
limit: z.number().int().min(1).max(maximumLimit),
total: z.number().int().min(0),
next_offset: z.number().int().min(0).nullable(),
has_more: z.boolean(),
})
.strict()
.superRefine((page, context) => {
const next = page.offset + page.items.length;
const hasMore = next < page.total;
if (page.items.length > page.limit)
context.addIssue({
code: "custom",
path: ["items"],
message: "page exceeds its declared limit",
});
if (page.items.length > 0 && next > page.total)
context.addIssue({
code: "custom",
path: ["total"],
message: "page items exceed its exact total",
});
if (hasMore && page.items.length === 0)
context.addIssue({
code: "custom",
path: ["items"],
message: "page continuation must advance its offset",
});
if (page.has_more !== hasMore)
context.addIssue({
code: "custom",
path: ["has_more"],
message: "page continuation does not match its exact total",
});
if (page.next_offset !== (hasMore ? next : null))
context.addIssue({
code: "custom",
path: ["next_offset"],
message: "page continuation offset is inconsistent",
});
});
const availablePermissions = z
.object({
available: z.literal(true),
source: z.literal("ghidra-memory-block"),
})
.strict();
const memoryRegion = z
.object({
name: z.string(),
start: canonicalAddress,
end: canonicalAddress,
readable: z.boolean(),
writable: z.boolean(),
executable: z.boolean(),
permissions: availablePermissions,
provenance: z.literal("ghidra-memory-block"),
address_space: z.string().min(1),
image_base: canonicalAddress,
initialized: z.boolean(),
overlay: z.boolean(),
})
.strict();
const segment = memoryRegion
.extend({ sections: z.array(memoryRegion) })
.strict();
const containingProcedure = z.discriminatedUnion("found", [
z
.object({
query_address: canonicalAddress,
found: z.literal(true),
procedure: z
.object({ address: canonicalAddress, name: z.string().min(1) })
.strict(),
})
.strict(),
z
.object({
query_address: canonicalAddress,
found: z.literal(false),
procedure: z.null(),
reason: z.enum(["outside_segments", "not_in_procedure"]),
})
.strict(),
]);
const resultSchemas = {
address_name: z.string().nullable(),
list_documents: z.array(z.string().min(1)).length(1),
list_names: pageSchema(symbolItem, 500),
list_procedures: pageSchema(procedureItem, 500),
list_segments: z.array(segment),
list_strings: pageSchema(stringItem, 500),
procedure_address: canonicalAddress,
resolve_containing_procedure: containingProcedure,
search_procedures: pageSchema(searchItem, 100),
search_strings: pageSchema(searchItem, 100),
} satisfies Readonly<Record<GhidraInventoryOperation, z.ZodType>>;
/** Require exact, bounded Java-bridge output before creating Evidence. */
export const parseGhidraInventoryResult = (
operation: GhidraInventoryOperation,
value: JsonValue,
): Result<JsonValue, AnalysisOutputError> => {
const parsed = resultSchemas[operation].safeParse(value);
return parsed.success
? ok(jsonValueSchema.parse(parsed.data))
: err(
new AnalysisOutputError(
operation,
"Ghidra bridge output did not match the inventory contract",
{ cause: parsed.error },
),
);
};

View File

@ -17,17 +17,28 @@ import type { BinaryTarget } from "../domain/binaryTarget.js";
import {
AnalysisCancelledError,
AnalysisCapabilityUnavailableError,
AnalysisInputError,
type AnalysisError,
AnalysisTimeoutError,
ProviderAdapterError,
} from "../domain/errors.js";
import { err, ok, type Result } from "../domain/result.js";
import type { Logger } from "../logger.js";
import { OFFICIAL_TOOL_CONTRACTS } from "../contracts/toolContracts.js";
import { GhidraClient } from "./GhidraClient.js";
import type { GhidraClientOptions } from "./GhidraClientTypes.js";
import {
GHIDRA_ANALYSIS_TIMEOUT_SECONDS,
GHIDRA_MAX_LINE_BYTES,
GHIDRA_REQUEST_TIMEOUT_MS,
GHIDRA_STARTUP_TIMEOUT_MS,
} from "./GhidraDefaults.js";
import {
GHIDRA_INVENTORY_OPERATIONS,
isGhidraInventoryOperation,
parseGhidraInventoryInput,
parseGhidraInventoryResult,
} from "./GhidraInventoryValues.js";
import {
ghidraInstallationDiagnostics,
inspectGhidraInstallation,
@ -45,13 +56,123 @@ export const GHIDRA_PROVIDER_IDENTITY: ProviderIdentity = Object.freeze({
version: null,
});
/** PR07 intentionally exposes session health but no binary operation contract. */
export const GHIDRA_PROVIDER_TOOL_CONTRACTS: readonly CapabilityDescriptor[] =
Object.freeze([]);
const officialContractByName = new Map(
OFFICIAL_TOOL_CONTRACTS.map((contract) => [contract.name, contract]),
);
/** Direct read-only contracts implemented by the Ghidra adapter. */
export const GHIDRA_PROVIDER_TOOL_CONTRACTS = Object.freeze(
GHIDRA_INVENTORY_OPERATIONS.map((operation) => {
const contract = officialContractByName.get(operation);
if (contract === undefined)
throw new TypeError(`Missing official contract for ${operation}`);
return contract;
}),
);
const PAGINATED_OPERATIONS: ReadonlySet<string> = new Set([
"list_names",
"list_procedures",
"list_strings",
"search_procedures",
"search_strings",
]);
const SEARCH_OPERATIONS: ReadonlySet<string> = new Set([
"search_procedures",
"search_strings",
]);
const healthLimitations = Object.freeze([
"The session serves operations only after default Ghidra auto-analysis completes; an analysis timeout fails the open instead of exposing partial results.",
"The imported Program and temporary project are ephemeral, read-only to REA, and deleted on close.",
]);
const limitationsFor = (operation: string): readonly string[] => {
const common = [
...healthLimitations,
"Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use <percent-encoded-space>:0x<hex>.",
];
switch (operation) {
case "list_documents":
return [
...common,
"A headless Ghidra session contains exactly one imported Program, unlike Hopper's multi-document GUI session.",
];
case "list_names":
return [
...common,
"The symbol inventory includes memory and external symbols, including dynamic symbols, but excludes variable and no-address namespace records.",
];
case "list_procedures":
case "procedure_address":
return [
...common,
"External functions and local thunks are distinct; procedure metadata identifies both and preserves a thunk target when Ghidra resolves one.",
];
case "list_strings":
return [
...common,
"Only Ghidra-defined string Data is observed; charset is reported, while a non-missing terminator cannot distinguish a present terminator from a fixed or Pascal layout.",
"Returned values are bounded to 1,024 Unicode code points and mark value_truncated instead of silently crossing the wire budget.",
];
case "list_segments":
return [
...common,
"Memory-block end addresses are exclusive; permissions come from Ghidra MemoryBlock flags rather than inference from section names.",
];
case "search_procedures":
case "search_strings":
return [
...common,
"Literal search enforces 1,000,000 cumulative work units; regex mode also accepts only a conservative finite Java-regex subset with 10,000 static paths and 4,096 UTF-16 code units per candidate.",
];
default:
return common;
}
};
const CAPABILITIES: readonly CapabilityDescriptor[] = Object.freeze(
GHIDRA_PROVIDER_TOOL_CONTRACTS.map((contract) =>
Object.freeze({
provider: GHIDRA_PROVIDER_IDENTITY,
operation: contract.name,
inputContractVersion: 1,
outputContractVersion: 1,
available: true,
reason: null,
pagination: PAGINATED_OPERATIONS.has(contract.name)
? ("offset" as const)
: ("none" as const),
exhaustive: !PAGINATED_OPERATIONS.has(contract.name),
effects: Object.freeze({
mutatesArtifact: false,
launchesProcess: true,
mayShowUi: false,
mayAccessNetwork: false,
mayWriteFilesystem: true,
changesPermissions: false,
requiresRoot: false,
}),
limits: Object.freeze({
maxResults: PAGINATED_OPERATIONS.has(contract.name)
? SEARCH_OPERATIONS.has(contract.name)
? 100
: 500
: null,
maxPayloadBytes: GHIDRA_MAX_LINE_BYTES,
timeoutMs: GHIDRA_REQUEST_TIMEOUT_MS,
}),
limitations: Object.freeze(limitationsFor(contract.name)),
}),
),
);
const SUPPORTED_ARCHITECTURES = new Set(["x86", "x86_64", "arm", "arm64"]);
const SUPPORTED_FORMATS = new Set(["elf", "pe", "mach-o"]);
/** Production seam for exercising provider projection without a real process. */
export type GhidraProviderClientFactory = (
options: GhidraClientOptions,
) => Pick<GhidraClient, "start" | "callTool" | "close">;
/** Linux Ghidra candidate backed by an isolated read-only headless import. */
export class GhidraProvider implements AnalysisProviderCandidate {
#installation: GhidraInstallationInspection | undefined;
@ -60,6 +181,8 @@ export class GhidraProvider implements AnalysisProviderCandidate {
private readonly config: AppConfig,
private readonly logger: Logger,
private readonly installationHost?: GhidraInstallationHost,
private readonly clientFactory: GhidraProviderClientFactory = (options) =>
new GhidraClient(options),
) {}
identity(): ProviderIdentity {
@ -67,7 +190,7 @@ export class GhidraProvider implements AnalysisProviderCandidate {
}
capabilities(): readonly CapabilityDescriptor[] {
return GHIDRA_PROVIDER_TOOL_CONTRACTS;
return CAPABILITIES;
}
inspectAvailability(): ProviderAvailability {
@ -152,7 +275,7 @@ export class GhidraProvider implements AnalysisProviderCandidate {
);
if (!prerequisites.ok) return unavailableClient(prerequisites.error);
const committedProfile = prerequisites.value.profile;
const client = new GhidraClient({
const client = this.clientFactory({
launcher: new GhidraHeadlessLauncher({
analyzeHeadlessPath: prerequisites.value.analyzeHeadlessPath,
...(this.config.ghidraJavaHome === undefined
@ -168,25 +291,42 @@ export class GhidraProvider implements AnalysisProviderCandidate {
logger: this.logger.child({ layer: "ghidra-bridge" }),
});
return {
execute: async (operation, _parameters, options) => {
if (operation !== "health")
execute: async (operation, parameters, options) => {
if (operation !== "health" && !isGhidraInventoryOperation(operation))
return err(
new AnalysisCapabilityUnavailableError(
GHIDRA_PROVIDER_IDENTITY.id,
operation,
"Ghidra binary operations are not declared by this adapter release.",
"The Ghidra adapter does not declare this operation.",
),
);
const started = await client.start(options?.signal);
if (!started.ok)
return err(projectSessionError(operation, started.error));
if (operation === "health") {
const started = await client.start(options?.signal);
if (!started.ok)
return err(projectSessionError(operation, started.error));
return ok(
createAnalysisExecution(started.value, committedProfile.provider, {
analysisProfile: committedProfile,
limitations: healthLimitations,
}),
);
}
const input = parseGhidraInventoryInput(operation, parameters);
if (!input.ok) return input;
const called = await client.callTool(
operation,
input.value,
options?.signal === undefined ? {} : { signal: options.signal },
);
if (!called.ok)
return err(projectSessionError(operation, called.error));
const result = parseGhidraInventoryResult(operation, called.value);
if (!result.ok) return result;
return ok(
createAnalysisExecution(started.value, committedProfile.provider, {
createAnalysisExecution(result.value, committedProfile.provider, {
rawResult: called.value,
analysisProfile: committedProfile,
limitations: [
"The session proves completed default Ghidra auto-analysis but exposes no binary operations in this release.",
"The imported program and project are ephemeral and externally read-only.",
],
limitations: limitationsFor(operation),
}),
);
},
@ -268,6 +408,19 @@ const projectSessionError = (
? GHIDRA_ANALYSIS_TIMEOUT_SECONDS * 1_000
: GHIDRA_STARTUP_TIMEOUT_MS),
);
if (
failure.kind === "remote" &&
["invalid_request", "not_found", "ambiguous"].includes(
failure.remoteCode ?? "",
)
)
return new AnalysisInputError(operation, { cause: failure });
if (failure.kind === "remote" && failure.remoteCode === "method_unavailable")
return new AnalysisCapabilityUnavailableError(
"ghidra",
operation,
failure.message,
);
return new ProviderAdapterError("ghidra", operation, {
cause: failure,
diagnostics: failure.diagnostics,

View File

@ -3,6 +3,7 @@ import { err, type Result } from "../domain/result.js";
import type { PendingOperations } from "../process/PendingOperations.js";
import type { GhidraSessionError } from "./GhidraSessionError.js";
import { ghidraResponseResult, parseGhidraResponseLine } from "./protocol.js";
import type { GhidraRemoteError } from "./protocol.js";
/** Dependencies for correlating validated bridge responses. */
export interface GhidraResponseRouterOptions {
@ -11,7 +12,7 @@ export interface GhidraResponseRouterOptions {
Result<JsonValue, GhidraSessionError>
>;
readonly nextId: () => number;
readonly remoteFailure: (message: string, cause: Error) => GhidraSessionError;
readonly remoteFailure: (failure: GhidraRemoteError) => GhidraSessionError;
readonly protocolFailure: (message: string, cause?: Error) => void;
}
@ -38,9 +39,7 @@ export class GhidraResponseRouter {
const result = ghidraResponseResult(parsed.value);
this.#options.pending.settle(
parsed.value.id,
result.ok
? result
: err(this.#options.remoteFailure(result.error.message, result.error)),
result.ok ? result : err(this.#options.remoteFailure(result.error)),
);
}
}

View File

@ -13,12 +13,14 @@ export type GhidraSessionFailureKind =
/** Additional structured context for a Ghidra session failure. */
export interface GhidraSessionErrorOptions extends ErrorOptions {
readonly timeoutMs?: number;
readonly remoteCode?: string;
}
/** Provider-owned failure with bounded, token-redacted local diagnostics. */
export class GhidraSessionError extends Error {
readonly diagnostics: Readonly<Record<string, JsonValue>>;
readonly timeoutMs: number | undefined;
readonly remoteCode: string | undefined;
constructor(
readonly kind: GhidraSessionFailureKind,
@ -30,5 +32,53 @@ export class GhidraSessionError extends Error {
this.name = "GhidraSessionError";
this.diagnostics = structuredClone(diagnostics);
this.timeoutMs = options.timeoutMs;
this.remoteCode = options.remoteCode;
}
}
/** Build a session failure while preserving bounded remote failure metadata. */
const createGhidraSessionError = (failure: {
readonly kind: GhidraSessionFailureKind;
readonly message: string;
readonly diagnostics: Readonly<Record<string, JsonValue>>;
readonly cause?: unknown;
readonly timeoutMs?: number;
readonly remoteCode?: string;
}): GhidraSessionError =>
new GhidraSessionError(
failure.kind,
failure.message,
failure.remoteCode === undefined
? failure.diagnostics
: {
...failure.diagnostics,
remote_code: failure.remoteCode,
remote_message: failure.message,
},
{
...(failure.cause === undefined ? {} : { cause: failure.cause }),
...(failure.timeoutMs === undefined
? {}
: { timeoutMs: failure.timeoutMs }),
...(failure.remoteCode === undefined
? {}
: { remoteCode: failure.remoteCode }),
},
);
/** Bind session-failure construction to a live, token-redacted diagnostic view. */
export const bindGhidraSessionFailure =
(diagnostics: () => Readonly<Record<string, JsonValue>>) =>
(
kind: GhidraSessionFailureKind,
message: string,
cause?: unknown,
options: Pick<GhidraSessionErrorOptions, "timeoutMs" | "remoteCode"> = {},
): GhidraSessionError =>
createGhidraSessionError({
kind,
message,
diagnostics: diagnostics(),
...(cause === undefined ? {} : { cause }),
...options,
});

View File

@ -3,6 +3,16 @@ import { z } from "zod";
import type { JsonValue } from "../domain/jsonValue.js";
import { err, ok, type Result } from "../domain/result.js";
import { GHIDRA_BRIDGE_VERSION } from "./GhidraDefaults.js";
import { GHIDRA_INVENTORY_OPERATIONS } from "./GhidraInventoryValues.js";
/** Exact methods proved by the bridge handshake after auto-analysis. */
export const GHIDRA_SESSION_CAPABILITIES = [
"ping",
"shutdown",
...GHIDRA_INVENTORY_OPERATIONS,
] as const;
const capabilitySchema = z.enum(GHIDRA_SESSION_CAPABILITIES);
const sessionInfoSchema = z
.object({
@ -19,12 +29,16 @@ const sessionInfoSchema = z
read_only: z.literal(true),
analysis_complete: z.boolean(),
analysis_timed_out: z.boolean(),
capabilities: z.array(z.enum(["ping", "shutdown"])).max(2),
capabilities: z
.array(capabilitySchema)
.length(GHIDRA_SESSION_CAPABILITIES.length),
target: z
.object({
name: z.string().min(1),
language_id: z.string().min(1),
compiler_spec_id: z.string().min(1),
image_base: z.string().regex(/^0x[0-9a-f]+$/u),
default_address_space: z.string().min(1),
})
.strict(),
})
@ -48,9 +62,11 @@ export const parseGhidraSessionInfo = (
parsed.data.run_id !== expected.runId ||
parsed.data.provider.version !== expected.providerVersion ||
parsed.data.profile_digest !== expected.profileDigest ||
new Set(parsed.data.capabilities).size !== 2 ||
!parsed.data.capabilities.includes("ping") ||
!parsed.data.capabilities.includes("shutdown") ||
new Set(parsed.data.capabilities).size !==
GHIDRA_SESSION_CAPABILITIES.length ||
GHIDRA_SESSION_CAPABILITIES.some(
(capability) => !parsed.data.capabilities.includes(capability),
) ||
parsed.data.analysis_complete === parsed.data.analysis_timed_out
)
return err(new Error("Ghidra bridge handshake identity is invalid"));

View File

@ -47,6 +47,17 @@ const responseSchema = z
/** Validated response emitted by REA's packaged Ghidra script. */
export type GhidraBridgeResponse = z.infer<typeof responseSchema>;
/** Expected operation failure returned by the authenticated Java bridge. */
export class GhidraRemoteError extends Error {
constructor(
readonly code: string,
message: string,
) {
super(message);
this.name = "GhidraRemoteError";
}
}
/** Parse one complete Java-bridge response without accepting extra fields. */
export const parseGhidraResponseLine = (
line: string,
@ -67,11 +78,12 @@ export const parseGhidraResponseLine = (
/** Project one validated response into its result or remote failure. */
export const ghidraResponseResult = (
response: GhidraBridgeResponse,
): Result<JsonValue, Error> =>
): Result<JsonValue, GhidraRemoteError> =>
response.ok
? ok(response.result ?? null)
: err(
new Error(
`${response.error?.code ?? "bridge_error"}: ${response.error?.message ?? "Ghidra bridge request failed"}`,
new GhidraRemoteError(
response.error?.code ?? "bridge_error",
response.error?.message ?? "Ghidra bridge request failed",
),
);

View File

@ -8,6 +8,11 @@ their Mach-O symbols and strings with native command-line tools.
Only source files are versioned. Generated binaries, generated large-fixture
source, debug information, and manifests must remain under `build/`.
`ghidra/inventory.c` is also compiled into temporary Linux ELF debug and
stripped variants by `npm run verify:ghidra`. It fixes local functions, external
`puts` linkage, defined strings, and writable/executable memory needed to prove
the read-only Ghidra inventory contracts without committing a binary.
The C fixture fixes a known call chain and strings. The version pair fixes an
added symbol, changed string, and changed call relationship. The generated
large fixture contains 1,205 uniquely named functions and strings so provider

View File

@ -0,0 +1,15 @@
#include <stdio.h>
volatile int rea_ghidra_inventory_global = 7;
__attribute__((noinline, used)) int rea_ghidra_inventory_leaf(int value) {
puts("REA_GHIDRA_LEAF_VALUE");
return value + rea_ghidra_inventory_global;
}
__attribute__((noinline, used)) int rea_ghidra_inventory_entry(void) {
puts("REA_GHIDRA_INVENTORY_ENTRY");
return rea_ghidra_inventory_leaf(35);
}
int main(void) { return rea_ghidra_inventory_entry() == 42 ? 0 : 1; }

View File

@ -89,6 +89,26 @@ else {
} else socket.write(response);
continue;
}
if (mode === "remote_error" && request.method === "list_procedures") {
socket.write(
`${JSON.stringify({
id: request.id,
ok: false,
error: {
code: "not_found",
message: "Unknown Ghidra procedure name",
},
})}\n`,
);
continue;
}
const inventory = inventoryResult(request.method);
if (inventory !== undefined) {
socket.write(
`${JSON.stringify({ id: request.id, ok: true, result: inventory })}\n`,
);
continue;
}
if (request.method === "shutdown") {
socket.end(
`${JSON.stringify({
@ -112,17 +132,130 @@ const sessionInfo = ({
timedOut,
}) => ({
name: "REA Ghidra bridge",
bridge_version: 1,
bridge_version: 2,
run_id: sessionRunId,
profile_digest: digest,
provider: { id: "ghidra", version },
read_only: true,
analysis_complete: !timedOut,
analysis_timed_out: timedOut,
capabilities: ["ping", "shutdown"],
capabilities: [
"ping",
"shutdown",
"address_name",
"list_documents",
"list_names",
"list_procedures",
"list_segments",
"list_strings",
"procedure_address",
"resolve_containing_procedure",
"search_procedures",
"search_strings",
],
target: {
name: "fixture",
language_id: "x86:LE:64:default",
compiler_spec_id: "gcc",
image_base: "0x1000",
default_address_space: "ram",
},
});
const inventoryResult = (method) => {
const page = (items) => ({
items,
offset: 0,
limit: method.startsWith("search_") ? 100 : 500,
total: items.length,
next_offset: null,
has_more: false,
});
switch (method) {
case "address_name":
return "fixture_main";
case "list_documents":
return ["fixture"];
case "list_names":
return page([
{
address: "0x1000",
value: "fixture_main",
value_truncated: false,
symbol: {
primary: true,
dynamic: false,
external: false,
type: "function",
source: "analysis",
},
},
]);
case "list_procedures":
return page([
{
address: "0x1000",
value: "fixture_main",
value_truncated: false,
procedure: { external: false, thunk: false, thunk_target: null },
},
]);
case "list_segments":
return [
{
name: ".text",
start: "0x1000",
end: "0x1100",
readable: true,
writable: false,
executable: true,
permissions: { available: true, source: "ghidra-memory-block" },
provenance: "ghidra-memory-block",
address_space: "ram",
image_base: "0x1000",
initialized: true,
overlay: false,
sections: [],
},
];
case "list_strings":
return page([
{
address: "0x2000",
value: "fixture value",
value_truncated: false,
string: {
encoding: "UTF-8",
termination: "present_or_not_required",
byte_length: 14,
},
},
]);
case "procedure_address":
return "0x1000";
case "resolve_containing_procedure":
return {
query_address: "0x1001",
found: true,
procedure: { address: "0x1000", name: "fixture_main" },
};
case "search_procedures":
return page([
{
address: "0x1000",
value: "fixture_main",
value_truncated: false,
},
]);
case "search_strings":
return page([
{
address: "0x2000",
value: "fixture value",
value_truncated: false,
},
]);
default:
return undefined;
}
};

View File

@ -15,6 +15,7 @@ import type {
GhidraLaunchSession,
GhidraLauncher,
} from "../src/ghidra/GhidraLauncher.js";
import { GHIDRA_SESSION_CAPABILITIES } from "../src/ghidra/GhidraSessionValues.js";
const fixturePath = fileURLToPath(
new URL("./fixtures/fakeGhidra.mjs", import.meta.url),
@ -31,6 +32,7 @@ type FixtureMode =
| "oversized_whitespace"
| "future_id"
| "analysis_timeout"
| "remote_error"
| "hang_after_start"
| "silent"
| "exit";
@ -114,12 +116,63 @@ describe("GhidraClient", () => {
read_only: true,
analysis_complete: true,
analysis_timed_out: false,
capabilities: ["ping", "shutdown"],
capabilities: GHIDRA_SESSION_CAPABILITIES,
target: {
image_base: "0x1000",
default_address_space: "ram",
},
},
});
expect(Buffer.byteLength(launcher.socketPaths[0] ?? "")).toBeLessThan(108);
});
it("correlates an admitted inventory request after startup", async () => {
const client = clientFor(new FixtureLauncher());
await expect(
client.callTool("list_procedures", {
document: null,
offset: 0,
limit: 500,
}),
).resolves.toMatchObject({
ok: true,
value: {
items: [
{
address: "0x1000",
value: "fixture_main",
procedure: { external: false, thunk: false },
},
],
total: 1,
has_more: false,
},
});
});
it("preserves an authenticated operation failure code and diagnostics", async () => {
const client = clientFor(new FixtureLauncher("remote_error"));
const result = await client.callTool("list_procedures", {
document: null,
offset: 0,
limit: 500,
});
expect(result).toMatchObject({
ok: false,
error: {
kind: "remote",
remoteCode: "not_found",
diagnostics: {
remote_code: "not_found",
remote_message: "Unknown Ghidra procedure name",
},
},
});
});
it.each([
["wrong_identity", "protocol"],
["malformed", "protocol"],

View File

@ -0,0 +1,232 @@
import { describe, expect, it } from "vitest";
import {
GHIDRA_INVENTORY_OPERATIONS,
isGhidraInventoryOperation,
parseGhidraInventoryInput,
parseGhidraInventoryResult,
type GhidraInventoryOperation,
} from "../src/ghidra/GhidraInventoryValues.js";
import type { JsonValue } from "../src/domain/jsonValue.js";
describe("Ghidra inventory boundary values", () => {
it("defaults bounded provider inputs without accepting undeclared fields", () => {
expect(parseGhidraInventoryInput("list_procedures", {})).toEqual({
ok: true,
value: { document: null, offset: 0, limit: 100 },
});
expect(
parseGhidraInventoryInput("search_strings", { pattern: "needle" }),
).toEqual({
ok: true,
value: {
pattern: "needle",
mode: "literal",
case_sensitive: false,
offset: 0,
limit: 100,
document: null,
},
});
expect(
parseGhidraInventoryInput("list_documents", { extra: true }),
).toMatchObject({ ok: false, error: { _tag: "AnalysisInputError" } });
expect(parseGhidraInventoryInput("address_name", {})).toMatchObject({
ok: false,
error: { _tag: "AnalysisInputError" },
});
expect(
parseGhidraInventoryInput("procedure_address", {
procedure: "x".repeat(4097),
}),
).toMatchObject({
ok: false,
error: { _tag: "AnalysisInputError" },
});
});
it("keeps the admitted operation set closed", () => {
expect(GHIDRA_INVENTORY_OPERATIONS).toHaveLength(10);
expect(isGhidraInventoryOperation("list_names")).toBe(true);
expect(isGhidraInventoryOperation("goto_address")).toBe(false);
expect(isGhidraInventoryOperation("set_comment")).toBe(false);
});
it("parses primary, dynamic, and external symbol facts", () => {
const items = [
{
address: "EXTERNAL:0x1",
value: "libc::puts",
value_truncated: false,
symbol: {
primary: true,
dynamic: false,
external: true,
type: "function",
source: "imported",
},
},
{
address: "0x401000",
value: "LAB_00401000",
value_truncated: false,
symbol: {
primary: true,
dynamic: true,
external: false,
type: "label",
source: "default",
},
},
] satisfies readonly JsonValue[];
expect(parseGhidraInventoryResult("list_names", page(items))).toEqual({
ok: true,
value: page(items),
});
});
it("parses thunk, string-layout, and memory-permission observations", () => {
expect(
parseGhidraInventoryResult(
"list_procedures",
page([
{
address: "0x401020",
value: "puts",
value_truncated: false,
procedure: {
external: false,
thunk: true,
thunk_target: "EXTERNAL:0x1",
},
},
]),
),
).toMatchObject({ ok: true });
expect(
parseGhidraInventoryResult(
"list_strings",
page([
{
address: "0x402000",
value: "fixture",
value_truncated: false,
string: {
encoding: "UTF-8",
termination: "missing",
byte_length: 7,
},
},
]),
),
).toMatchObject({ ok: true });
expect(
parseGhidraInventoryResult("list_segments", [
{
name: ".text",
start: "0x401000",
end: "0x402000",
readable: true,
writable: false,
executable: true,
permissions: { available: true, source: "ghidra-memory-block" },
provenance: "ghidra-memory-block",
address_space: "ram",
image_base: "0x400000",
initialized: true,
overlay: false,
sections: [],
},
]),
).toMatchObject({ ok: true });
});
it.each(malformedOutputs())(
"rejects malformed %s output",
(_name, operation, value) => {
expect(parseGhidraInventoryResult(operation, value)).toMatchObject({
ok: false,
error: { _tag: "AnalysisOutputError" },
});
},
);
});
function malformedOutputs(): Array<
[string, GhidraInventoryOperation, JsonValue]
> {
return [
[
"non-canonical address",
"list_procedures",
page([
{
address: "00401000",
value: "main",
value_truncated: false,
procedure: {
external: false,
thunk: false,
thunk_target: null,
},
},
]),
],
[
"missing external metadata",
"list_names",
page([{ address: "0x401000", value: "main", value_truncated: false }]),
],
[
"contradictory continuation",
"search_strings",
{
...page([]),
total: 1,
has_more: false,
next_offset: null,
},
],
[
"non-advancing continuation",
"list_procedures",
{
...page([]),
total: 1,
has_more: true,
next_offset: 0,
},
],
[
"items beyond exact total",
"list_procedures",
{ ...page([procedureItem()]), total: 0 },
],
["provider limit", "search_procedures", { ...page([]), limit: 101 }],
["multiple programs", "list_documents", ["first", "second"]],
];
}
function procedureItem(): JsonValue {
return {
address: "0x401000",
value: "main",
value_truncated: false,
procedure: {
external: false,
thunk: false,
thunk_target: null,
},
};
}
function page(items: readonly JsonValue[]) {
return {
items: [...items],
offset: 0,
limit: 500,
total: items.length,
next_offset: null,
has_more: false,
};
}

293
tests/ghidraMcp.test.ts Normal file
View File

@ -0,0 +1,293 @@
import { Client, InMemoryTransport } from "@modelcontextprotocol/client";
import { describe, expect, it } from "vitest";
import { BinarySession } from "../src/application/BinarySession.js";
import { EnhancedTools } from "../src/application/EnhancedTools.js";
import { AnalysisProviderRegistry } from "../src/application/AnalysisProviderRegistry.js";
import { SessionProviderRouter } from "../src/application/SessionProviderRouter.js";
import { parseConfig } from "../src/config.js";
import { parseEvidence } from "../src/domain/evidence.js";
import type { JsonValue } from "../src/domain/jsonValue.js";
import { ok } from "../src/domain/result.js";
import type { GhidraInstallationHost } from "../src/ghidra/GhidraInstallation.js";
import type { GhidraInventoryOperation } from "../src/ghidra/GhidraInventoryValues.js";
import {
GhidraProvider,
type GhidraProviderClientFactory,
} from "../src/ghidra/GhidraProvider.js";
import { GHIDRA_SESSION_CAPABILITIES } from "../src/ghidra/GhidraSessionValues.js";
import { silentLogger } from "../src/logger.js";
import { createServer } from "../src/server/createServer.js";
const INSTALL = "/opt/ghidra_12.1.2_PUBLIC";
describe("Ghidra MCP and shared CLI composition", () => {
it("preserves provider evidence, composed parity, and capability routing", async () => {
const calls: GhidraInventoryOperation[] = [];
const factory: GhidraProviderClientFactory = (options) => ({
start: () => Promise.resolve(ok(sessionInfo(options.profileDigest))),
callTool: (operation, input) => {
calls.push(operation);
return Promise.resolve(ok(resultFor(operation, input)));
},
close: () => Promise.resolve(),
});
const config = parseConfig({ GHIDRA_INSTALL_DIR: INSTALL });
if (!config.ok) throw config.error;
const provider = new GhidraProvider(
config.value,
silentLogger,
installationHost(),
factory,
);
const session = new BinarySession(
SessionProviderRouter.selectable(
new AnalysisProviderRegistry([provider]),
[],
),
);
const server = createServer(session, session, { logger: silentLogger });
const mcp = new Client({ name: "ghidra-parity", version: "1.0.0" });
const [clientTransport, serverTransport] =
InMemoryTransport.createLinkedPair();
try {
await server.connect(serverTransport);
await mcp.connect(clientTransport);
const opened = await mcp.callTool({
name: "open_binary",
arguments: { path: process.execPath },
});
expect(opened.isError).not.toBe(true);
const listed = parseEvidence(
(
await mcp.callTool({
name: "list_procedures",
arguments: {},
})
).structuredContent,
);
expect(listed).toMatchObject({
operation: "list_procedures",
provider: { id: "ghidra", name: "Ghidra", version: "12.1.2" },
analysis_profile: {
provider: { id: "ghidra", version: "12.1.2" },
parameters: {
import_mode: "ephemeral-read-only",
analyzer_preset: "ghidra-default",
},
},
normalized_result: {
items: [
{
address: "0x401000",
value: "fixture_main",
procedure: {
external: false,
thunk: false,
thunk_target: null,
},
},
],
total: 1,
},
raw_result: {
items: [{ value_truncated: false }],
},
});
const mcpOverview = parseEvidence(
(
await mcp.callTool({
name: "binary_overview",
arguments: { detail: "detailed", limit: 5 },
})
).structuredContent,
);
const directOverview = await new EnhancedTools(session).execute(
"binary_overview",
{ detail: "detailed", limit: 5 },
);
expect(directOverview.ok).toBe(true);
if (!directOverview.ok) return;
expect(mcpOverview.normalized_result).toEqual(directOverview.value);
expect(mcpOverview).toMatchObject({
provider: { id: "rea-workflow" },
confidence: "derived",
normalized_result: {
document: "fixture",
segment_count: 1,
procedure_count: 1,
string_count: 2,
segments: [{ name: ".text", length: 256 }],
},
});
const unsupported = await mcp.callTool({
name: "set_comment",
arguments: { address: "0x401000", comment: "not allowed" },
});
expect(unsupported.isError).toBe(true);
expect(unsupported.structuredContent).toMatchObject({
error: { code: "capability_unavailable" },
});
expect(calls).not.toContain("set_comment");
const status = await mcp.callTool({
name: "binary_session",
arguments: {},
});
expect(status.structuredContent).toMatchObject({
result: {
open: true,
analysis_provider_binding: {
provider: { id: "ghidra", version: "12.1.2" },
},
tool_availability: expect.arrayContaining([
expect.objectContaining({
name: "binary_overview",
available: true,
}),
expect.objectContaining({ name: "swift_classes", available: true }),
expect.objectContaining({
name: "get_objc_classes",
available: true,
}),
expect.objectContaining({
name: "batch_decompile",
available: false,
reason: "provider_missing",
}),
expect.objectContaining({
name: "trace_feature",
available: false,
reason: "provider_missing",
}),
]),
},
});
} finally {
await Promise.allSettled([mcp.close(), server.close()]);
await session.close();
}
});
});
const installationHost = (): GhidraInstallationHost => ({
readText: () => "application.version=12.1.2\n",
executable: () => true,
probeJava: () => ({
version: "21.0.11",
major: 21,
home: "/usr/lib/jvm/jdk-21",
bits: 64,
jdk: true,
}),
});
const sessionInfo = (profileDigest: string) => ({
name: "REA Ghidra bridge" as const,
bridge_version: 2 as const,
run_id: "11111111-1111-4111-8111-111111111111",
profile_digest: profileDigest,
provider: { id: "ghidra" as const, version: "12.1.2" },
read_only: true as const,
analysis_complete: true,
analysis_timed_out: false,
capabilities: [...GHIDRA_SESSION_CAPABILITIES],
target: {
name: "fixture",
language_id: "x86:LE:64:default",
compiler_spec_id: "gcc",
image_base: "0x400000",
default_address_space: "ram",
},
});
const resultFor = (
operation: GhidraInventoryOperation,
input: Readonly<Record<string, JsonValue>>,
): JsonValue => {
const limit = typeof input.limit === "number" ? input.limit : 100;
switch (operation) {
case "list_documents":
return ["fixture"];
case "list_procedures":
return page(
[
{
address: "0x401000",
value: "fixture_main",
value_truncated: false,
procedure: {
external: false,
thunk: false,
thunk_target: null,
},
},
],
limit,
);
case "list_strings":
return page(
[
stringItem("0x402000", "inventory fixture"),
stringItem("0x402020", "external fixture"),
],
limit,
);
case "list_segments":
return [
{
name: ".text",
start: "0x401000",
end: "0x401100",
readable: true,
writable: false,
executable: true,
permissions: { available: true, source: "ghidra-memory-block" },
provenance: "ghidra-memory-block",
address_space: "ram",
image_base: "0x400000",
initialized: true,
overlay: false,
sections: [],
},
];
case "list_names":
case "search_procedures":
case "search_strings":
return page([], limit);
case "address_name":
return "fixture_main";
case "procedure_address":
return "0x401000";
case "resolve_containing_procedure":
return {
query_address: "0x401001",
found: true,
procedure: { address: "0x401000", name: "fixture_main" },
};
}
};
const page = (items: readonly JsonValue[], limit: number): JsonValue => ({
items: [...items],
offset: 0,
limit,
total: items.length,
next_offset: null,
has_more: false,
});
const stringItem = (address: string, value: string): JsonValue => ({
address,
value,
value_truncated: false,
string: {
encoding: "UTF-8",
termination: "present_or_not_required",
byte_length: value.length + 1,
},
});

View File

@ -6,8 +6,12 @@ import {
GHIDRA_PROVIDER_IDENTITY,
GHIDRA_PROVIDER_TOOL_CONTRACTS,
GhidraProvider,
type GhidraProviderClientFactory,
} from "../src/ghidra/GhidraProvider.js";
import type { GhidraInstallationHost } from "../src/ghidra/GhidraInstallation.js";
import { GHIDRA_SESSION_CAPABILITIES } from "../src/ghidra/GhidraSessionValues.js";
import { err, ok } from "../src/domain/result.js";
import { GhidraSessionError } from "../src/ghidra/GhidraSessionError.js";
import { silentLogger } from "../src/logger.js";
const INSTALL = "/opt/ghidra_12.1.2_PUBLIC";
@ -23,10 +27,13 @@ const installationHost = (): GhidraInstallationHost => ({
}),
});
const provider = (host = installationHost()): GhidraProvider => {
const provider = (
host = installationHost(),
clientFactory?: GhidraProviderClientFactory,
): GhidraProvider => {
const config = parseConfig({ GHIDRA_INSTALL_DIR: INSTALL });
if (!config.ok) throw config.error;
return new GhidraProvider(config.value, silentLogger, host);
return new GhidraProvider(config.value, silentLogger, host, clientFactory);
};
describe("Ghidra provider", () => {
@ -36,9 +43,29 @@ describe("Ghidra provider", () => {
const ghidra = provider(host);
expect(ghidra.identity()).toEqual(GHIDRA_PROVIDER_IDENTITY);
expect(ghidra.capabilities()).toBe(GHIDRA_PROVIDER_TOOL_CONTRACTS);
expect(GHIDRA_PROVIDER_TOOL_CONTRACTS).toEqual([]);
expect(ghidra.capabilities().map(({ operation }) => operation)).toEqual(
GHIDRA_PROVIDER_TOOL_CONTRACTS.map(({ name }) => name),
);
expect(GHIDRA_PROVIDER_TOOL_CONTRACTS).toHaveLength(10);
expect(Object.isFrozen(ghidra.capabilities())).toBe(true);
expect(ghidra.capabilities()).toEqual(
expect.arrayContaining([
expect.objectContaining({
operation: "list_procedures",
pagination: "offset",
effects: expect.objectContaining({
mutatesArtifact: false,
mayShowUi: false,
mayWriteFilesystem: true,
}),
limits: {
maxResults: 500,
maxPayloadBytes: 1024 * 1024,
timeoutMs: 10_000,
},
}),
]),
);
expect(ghidra.inspectAvailability()).toMatchObject({
status: "available",
diagnostics: {
@ -86,7 +113,33 @@ describe("Ghidra provider", () => {
});
it("commits exact provider, isolation, and resource semantics", async () => {
const ghidra = provider();
const callTool = vi.fn().mockResolvedValue(
ok({
items: [
{
address: "0x1000",
value: "fixture_main",
value_truncated: false,
procedure: {
external: false,
thunk: false,
thunk_target: null,
},
},
],
offset: 0,
limit: 100,
total: 1,
next_offset: null,
has_more: false,
}),
);
const start = vi.fn().mockResolvedValue(ok(sessionInfo()));
const ghidra = provider(installationHost(), () => ({
start,
callTool,
close: () => Promise.resolve(),
}));
const resolved = await ghidra.resolveAnalysisProfile(
executableTarget("elf", "x86_64"),
);
@ -112,15 +165,92 @@ describe("Ghidra provider", () => {
const result = await ghidra
.createClient(executableTarget("elf", "x86_64"), resolved.value.profile)
.execute("list_procedures", {});
expect(callTool).toHaveBeenCalledWith(
"list_procedures",
{ document: null, offset: 0, limit: 100 },
{},
);
expect(result).toMatchObject({
ok: false,
error: {
_tag: "AnalysisCapabilityUnavailableError",
providerId: "ghidra",
ok: true,
value: {
provider: {
id: "ghidra",
name: "Ghidra",
version: "12.1.2",
},
analysisProfile: resolved.value.profile,
result: {
items: [{ address: "0x1000", value: "fixture_main" }],
total: 1,
},
rawResult: {
items: [{ procedure: { external: false, thunk: false } }],
},
},
});
expect(start).not.toHaveBeenCalled();
});
it("rejects malformed inventory output before Evidence creation", async () => {
const ghidra = provider(installationHost(), () => ({
start: () => Promise.resolve(ok(sessionInfo())),
callTool: () => Promise.resolve(ok({ items: "not-a-page" })),
close: () => Promise.resolve(),
}));
const resolved = await ghidra.resolveAnalysisProfile(
executableTarget("elf", "x86_64"),
);
if (!resolved.ok || resolved.value.profile === null) return;
await expect(
ghidra
.createClient(executableTarget("elf", "x86_64"), resolved.value.profile)
.execute("list_procedures", {}),
).resolves.toMatchObject({
ok: false,
error: { _tag: "AnalysisOutputError" },
});
});
it.each([
["invalid_request", "AnalysisInputError"],
["not_found", "AnalysisInputError"],
["ambiguous", "AnalysisInputError"],
["method_unavailable", "AnalysisCapabilityUnavailableError"],
] as const)(
"projects remote %s without losing its typed meaning",
async (code, tag) => {
const ghidra = provider(installationHost(), () => ({
start: () => Promise.resolve(ok(sessionInfo())),
callTool: () =>
Promise.resolve(
err(
new GhidraSessionError(
"remote",
"Fixture remote failure",
{ remote_code: code },
{ remoteCode: code },
),
),
),
close: () => Promise.resolve(),
}));
const resolved = await ghidra.resolveAnalysisProfile(
executableTarget("elf", "x86_64"),
);
if (!resolved.ok || resolved.value.profile === null) return;
await expect(
ghidra
.createClient(
executableTarget("elf", "x86_64"),
resolved.value.profile,
)
.execute("list_procedures", {}),
).resolves.toMatchObject({ ok: false, error: { _tag: tag } });
},
);
it("returns cancellation before profile work", async () => {
const controller = new AbortController();
controller.abort();
@ -135,6 +265,25 @@ describe("Ghidra provider", () => {
});
});
const sessionInfo = () => ({
name: "REA Ghidra bridge" as const,
bridge_version: 2 as const,
run_id: "11111111-1111-4111-8111-111111111111",
profile_digest: "a".repeat(64),
provider: { id: "ghidra" as const, version: "12.1.2" },
read_only: true as const,
analysis_complete: true,
analysis_timed_out: false,
capabilities: [...GHIDRA_SESSION_CAPABILITIES],
target: {
name: "fixture",
language_id: "x86:LE:64:default",
compiler_spec_id: "gcc",
image_base: "0x1000",
default_address_space: "ram",
},
});
const executableTarget = (
format: BinaryTarget["format"],
architecture?: NonNullable<BinaryTarget["architecture"]>,

View File

@ -19,7 +19,10 @@ import {
HOPPER_PROVIDER_IDENTITY,
HOPPER_PROVIDER_TOOL_CONTRACTS,
} from "../src/hopper/HopperProvider.js";
import { GHIDRA_PROVIDER_IDENTITY } from "../src/ghidra/GhidraProvider.js";
import {
GHIDRA_PROVIDER_IDENTITY,
GHIDRA_PROVIDER_TOOL_CONTRACTS,
} from "../src/ghidra/GhidraProvider.js";
import { NATIVE_MACOS_PROVIDER_IDENTITY } from "../src/native/NativeMacOSProvider.js";
import {
assertDocumentationFacts,
@ -74,7 +77,7 @@ describe("canonical product catalog", () => {
expect(
catalog.providers.find(({ id }) => id === GHIDRA_PROVIDER_IDENTITY.id)
?.capabilities,
).toEqual([]);
).toEqual(GHIDRA_PROVIDER_TOOL_CONTRACTS.map(({ name }) => name).sort());
expect(
z.toJSONSchema(analysisSnapshotSchema).properties?.snapshot_version,
).toMatchObject({

Some files were not shown because too many files have changed in this diff Show More