mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
Open
opened 2026-10-31 01:13:36 +00:00 by bsakaguchi
·
0 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
morluto/rea#6326
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/4591
Author: @CameronBrooks11
Created: 10/16/2026
Status: 🔄 Open
Base:
main← Head:feat/ghidra-posix-loopback-transport📝 Commits (4)
75a247efeat(ghidra): select the loopback bridge transport on POSIX hosts1a931cefix(ghidra): withhold analysis extensions over the loopback transport3a04240fix(ghidra): declare the loopback transport network effecta40c193Merge remote-tracking branch 'upstream/main' into feat/ghidra-posix-loopback-transport📊 Changes
18 files changed (+675 additions, -31 deletions)
View changed files
📝
.agents/skills/reverse-engineer-anything/references/native-and-artifacts.md(+1 -1)📝
SECURITY.md(+4 -0)📝
docs/ghidra-provider.md(+3 -1)📝
docs/installation.md(+33 -0)📝
src/config.test.ts(+35 -0)📝
src/config/environment.ts(+2 -0)➕
src/config/ghidraBridgeTransport.ts(+16 -0)📝
src/config/parseConfig.ts(+3 -0)📝
src/config/types.ts(+2 -0)📝
src/ghidra/GhidraProvider.behavior.test.ts(+207 -0)📝
src/ghidra/GhidraProvider.ts(+34 -4)📝
src/ghidra/GhidraProviderCapabilities.ts(+55 -0)📝
src/ghidra/GhidraProviderClient.ts(+42 -8)📝
src/ghidra/GhidraTransport.ts(+27 -1)📝
src/ghidra/extensions/GhidraExtensions.test.ts(+85 -13)📝
src/ghidra/extensions/GhidraExtensions.ts(+15 -3)📝
tests/boundary/filesystem/ghidraProfileArtifactOwnership.test.ts(+6 -0)➕
tests/boundary/providers/ghidra/ghidraBridgeTransportSelection.test.ts(+105 -0)📄 Description
Summary
Fixes #4588.
On Linux and macOS the Ghidra provider always serves its bridge over a Unix socket (
GhidraProviderClient.tsselectsauthenticated-loopback-tcponly forwin32). A sandbox that refusessocket(AF_UNIX)withEPERM, such as Claude Code's bubblewrap plus seccomp sandbox, therefore fails every Ghidra operation after import and auto-analysis withGhidra exited before bridge startupandjava.net.SocketException: Operation not permittedfromReaGhidraBridge.serveUnixSocket. Loopback TCP works in the same sandbox, and REA already ships an authenticated loopback transport for Windows P0 whose Node and Java paths have non-Windows branches.This PR adds
REA_GHIDRA_BRIDGE_TRANSPORTwith the valuesunix-socketandauthenticated-loopback-tcp. Unset keeps today's host default. On a POSIX host,authenticated-loopback-tcpselects the existing transport; the session is read-only, as on Windows, and says so. A configured analysis extension (NativeAOT) is withheld on that transport rather than committed, so the session still opens read-only instead of the bridge rejecting the profile and failing outright.Problem and expected behavior
AF_UNIXsockets. Reproduced on main61e688070and 6.5.0 with Ghidra 12.1.4 and JDK 21 (output in #4588).127.0.0.1has no way to use the transport REA already has for that situation.annotate_native_function,set_address_nameandset_addresses_namesfail ascapability_unavailablewith a reason naming the setting; a configured NativeAOT extension is withheld with a reason rather than aborting the session; without the setting nothing changes.Change and scope
src/config/ghidraBridgeTransport.ts(new): the zod enum, with a constraint message that does not echo the rejected value.src/config/environment.ts,types.ts,parseConfig.ts:REA_GHIDRA_BRIDGE_TRANSPORT->AppConfig.ghidraBridgeTransport, optional likeghidraDisabledAnalyzers.src/ghidra/GhidraTransport.ts:GhidraTransportKindis inferred from that schema, so the literal list lives once. AddsresolveGhidraTransport(platform, configured)(the effective host transport, in one place) andtransportAdmitsAnalysisExtensions(transport)(true only for the Unix socket, mirroring the bridge's own rule).src/ghidra/GhidraProviderClient.ts: the transport iswin32 ? loopback : config.ghidraBridgeTransport ?? unix-socket. An explicitunix-socketon Windows is refused in the admission gate (admitGhidraClient), before installation and native readiness checks, because Node path-based IPC cannot reach a Java AF_UNIX listener there. A POSIX loopback session addsloopbackTransportLimitationsto every result.src/ghidra/extensions/GhidraExtensions.ts: extension resolution and profile validation take the selected transport. Over a transport that cannot serve extensions (loopback), a configured adapter is withheld after its host/target checks rather than committed, and the client guard and validator expect the empty inventory there. This prevents a session-killing state:ReaGhidraBridgerejects analysis extensions on any non-Unix transport before it opens the listener, so committing one under loopback would fail the whole session (including reads), not just the extension.src/ghidra/GhidraProviderCapabilities.ts:loopbackTransportCapabilities()marks the three mutating operations unavailable withLOOPBACK_TRANSPORT_MUTATION_REASONand appends the limitations; noavailabilityCode, because the selected transport, not the host, withholds mutation.LOOPBACK_TRANSPORT_EXTENSION_REASONnames a withheld configured extension so the omission is explicit. Loopback capabilities also declaremayAccessNetwork, since the bridge opens a127.0.0.1TCP listener the client connects to;declareLoopbackNetworkEffectapplies it to a POSIX loopback session and to an existing-project session over loopback.windowsP0Capabilitiesand the Unix socket default are unchanged.src/ghidra/GhidraProvider.ts:capabilities()andinspectReadinessSnapshot()use that projection on POSIX when loopback is selected; profile resolution passes the effective transport to extension resolution.docs/installation.md(new "Ghidra bridge transport" section and a pointer from the socket paragraph),docs/ghidra-provider.md,SECURITY.md, and the skill referencenative-and-artifacts.md.Contribution scope: a configuration option that selects an existing transport of an existing provider and withholds mutation and configured extensions on it, so no boundary widens; a maintainer scope decision is not applicable. Whether POSIX loopback may carry mutation authority, or whether a FIFO transport is preferred, is the open question in #4588.
Intentionally not included:
GhidraClient.tskey read-only on the transport; changing that is the scope decision in #4588.rea setup. It is not inSELECTED_REGISTRATION_SETTINGS, likeREA_GHIDRA_DISABLED_ANALYZERS; the docs say to set it in the sandboxed process environment.transport.AF_UNIXinbridge/hopper_bridge.pyand has the same limitation./tmpfallback ofghidraSessionRoot()whenTMPDIRhas a dot-prefixed element; it is unrelated and reproduces without this change.Contract and boundary impact
src/config/environment.tsat configuration parsing; transport selection and the admission refusal insrc/ghidra/GhidraProviderClient.tsat client admission/creation.REA_GHIDRA_BRIDGE_TRANSPORTand its constraint. Over POSIX loopback the three mutating operations reportavailable: falsewith the reason and noavailability_code; results gain the loopback limitation strings, plus a withheld-extension limitation when a NativeAOT jar is configured.unix-socket. Linux verified against real Ghidra 12.1.4; macOS not run..pendingatomic move, retry of a dropped pre-authentication connection and runtime cleanup are the existing POSIX code paths; no new lifecycle stage.generate-skill-metadata.mjs --checkpasses. No catalog change.Expected effects:
127.0.0.1on an ephemeral port, as Windows P0 does; nothing leaves the host)Evidence and regression coverage
Tests added or updated:
src/config.test.ts: accepts both values, keeps the field absent when unset, rejects another value naming the setting and constraint without echoing the value.src/ghidra/GhidraProvider.behavior.test.ts, "Ghidra bridge transport selection": POSIX default staysunix-socketwith full authority and no loopback limitation; the setting selects loopback, adds the limitations to results, withholds exactly the three mutating operations (same ininspectReadinessSnapshot) with the reason and no code; a configured NativeAOT jar over loopback commits noanalysis_extensions, the session still opens, and the result carries the withheld-extension reason; loopback capabilities declaremayAccessNetworkwhile the Unix socket default does not, including for an existing-project session over loopback; Windows keeps its P0 capability wording and refusesunix-socketwith aProviderAdapterErrorbefore the client factory runs.src/ghidra/extensions/GhidraExtensions.test.ts, "Ghidra extension transport withholding": resolution withholds a configured extension over a non-admitting transport; the profile validator expects the empty inventory there and treats a committed extension as an inventory mismatch.tests/boundary/providers/ghidra/ghidraBridgeTransportSelection.test.ts(skipped on win32): the production provider client, private runtime, endpoint record and loopback socket against the fake bridge;list_proceduressucceeds, the endpoint isbridge-endpoint.json, and the limitations are present.tests/boundary/filesystem/ghidraProfileArtifactOwnership.test.ts: updated for the new extension-resolution signature (the selected transport is threaded through).The transport-withholding regression tests were written red-first: each fails against the unfixed predicate (extensions admitted over loopback) and passes once it is applied.
Validation performed
Re-verified on
3a0424058, rebased onto current upstream main (d48e472fa), Linux x86-64:tsc --noEmit— clean.oxfmt --check src tests,oxlint src tests(0 errors),knip,verify:architecture-guards(2283 files),verify:module-boundaries(3447 files) — all pass.src/ghidra/extensions/GhidraExtensions.test.tsandsrc/ghidra/GhidraProvider.behavior.test.ts— 201 passed.tests/boundary/providers/ghidra/ghidraBridgeTransportSelection.test.ts,ghidraTransport.test.ts, andtests/boundary/filesystem/ghidraProfileArtifactOwnership.test.ts— 23 passed.End-to-end against real Ghidra 12.1.4 (Linux x86-64, CLI), captured on the initial implementation; the runtime transport path is unchanged since, for
int add_magic(int x){ return x * 3 + 42; }:Unset:
code: execution_failure,failure_message: Ghidra exited before bridge startup,transport: unix-socket, script errorjava.net.SocketException: Operation not permitted ... at ReaGhidraBridge.serveUnixSocket.REA_GHIDRA_BRIDGE_TRANSPORT=authenticated-loopback-tcp:normalized_resultisint add_magic(int param_1) { return param_1 * 3 + 0x2a; }, providerghidra 12.1.4, limitations include the loopback strings.Same setting,
rea annotate-native-function:capability_unavailablewithreason"The authenticated loopback bridge transport does not admit database mutation; unset REA_GHIDRA_BRIDGE_TRANSPORT to use the Unix socket transport."Observed, derived, and inferred claims remain distinguishable.
Artifact identity, source provenance, and failed attempts remain preserved.
Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.
Remaining proof gaps: the NativeAOT-extension-withholding path is covered by unit and boundary tests but not exercised against real Ghidra with a configured jar over loopback; macOS not run;
npm run verify:ghidranot run with the setting; no Windows host; the full-reponpm run check:pr,verify:package, andconfig.test.ts/docs:checkwere not re-run in this pass (docs:checkfails in this sandbox onEROFS mkdtemp, an environment limitation, not a repo defect).Compatibility, safety, and release
unix-socketon Windows.SECURITY.mdand the installation guide say so. The value is non-secret and appears in limitations and diagnostics.Author readiness
Human owner: @CameronBrooks11
Before merge
type(scope): outcome.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.