mirror of
https://github.com/morluto/rea.git
synced 2026-11-12 01:41:21 +00:00
* refactor(analysis): centralize resource budgets and recovery facts * feat(analysis): expose ASAR and Ghidra runtime admission controls * feat(artifacts): expose reader admission and preserve limited recognition * feat(javascript): expose recoverable semantic precision budgets * feat(web): add recoverable source-map budgets and compact retained views * feat(web): make historical capture decoding budgets recoverable * fix(desktop): enforce selected view policies across capture and export * feat(runtime): make Frida and LLDB retention budgets selectable * feat(native): expose diagnostic budgets and preserve exhaustion causes * feat(managed): expose recoverable snapshot and representation budgets * feat(metadata): make Go and Rust inspection budgets recoverable * feat(wasm): expose representation and producer admissions * feat(evm): expose per-call worker resource budgets * feat(android): make resource and string-pool omissions recoverable * feat(producers): expose command and recorded-capture budgets * docs(analysis): record recovery contracts and integrated validation * fix(docs): link calibration oracle from published verification pages * fix(docs): restore desktop task anchors and receipt links * test(analysis): align fixtures with selectable budget contracts * fix(analysis): remove source-location projector dependency cycle * test(analysis): refresh budget recovery and verifier regressions * test(analysis): preserve format and publication recovery expectations * test(windows): align conformance with owned runtime admission * fix(desktop): preserve selected alias kinds in exported state * test(analysis): align provider fixtures with recoverable budgets * test(desktop): validate emitted alias metadata structurally * fix(ghidra): classify bounded Windows endpoint refusals * test(cli): assert selectable artifact admission recovery * fix(cli): preserve capture provenance in environment builds
78 lines
4.8 KiB
Markdown
78 lines
4.8 KiB
Markdown
# Bun standalone executables
|
|
|
|
`inspect-artifact` inventories embedded Bun module graphs in Mach-O `__BUN,__bun`,
|
|
PE `.bun`, ELF `.bun`, and appended trailers. `extract-artifact` writes their stored
|
|
module contents through the existing safe output tree. Neither operation executes
|
|
the executable or decompiles bytecode.
|
|
|
|
```sh
|
|
rea inspect-artifact ./hello --json
|
|
rea extract-artifact ./hello --json
|
|
```
|
|
|
|
In MCP, open the executable with `open_binary`, then call `inspect_artifact`.
|
|
Use `detail: "summary"` for large graphs and `inspect_analysis_view` to page retained
|
|
Evidence. The root metadata's `entry_point_logical_path` is the reader-owned
|
|
location of its entry module. Use it as an inventory `logical_paths` filter,
|
|
then read selected node fields with the returned content identity. This also
|
|
works for names mapped to indexed extraction paths. The complete Evidence stays
|
|
retained; no source-name normalization is needed in the caller.
|
|
|
|
The root reports the carrier, layout, module count, entry point, raw flags and
|
|
compile exec-argv. Each module retains its source name, loader and encoding values,
|
|
entry-point status, sizes and SHA-256. Sourcemaps, bytecode and module-info regions
|
|
are separate children. Source names such as `/$bunfs/root/main.js` remain in
|
|
metadata; extraction uses a relative path. Unsafe or non-UTF-8 names receive an
|
|
indexed path and retain their source spelling or bytes. Virtual names deeper
|
|
than the selected `path_parts` allowance (default 256) also use an indexed path with an explicit limitation,
|
|
preventing unbounded path-tree work while retaining the source fact. Duplicate names remain
|
|
separate occurrences; ordinary extraction collision rules apply.
|
|
|
|
The recognized record shapes are the 36-byte Bun 1.3.3 layout and the 52-byte
|
|
Bun 1.3.9 layout. These labels identify structural layouts, not a detected compiler
|
|
version. Bun does not store an explicit revision identifier: unknown table sizes
|
|
and ambiguous known layouts are unsupported. A future layout that is byte-for-byte
|
|
compatible cannot be distinguished. Invalid pointers and truncated claimed sections
|
|
are malformed. An absent trailer without a named section does not establish a Bun
|
|
graph. Unknown enum values remain raw, with a null name.
|
|
|
|
Sourcemaps are stored Bun regions, not necessarily standalone JSON source maps.
|
|
Extracted contents retain their original encoding. Use JavaScript analysis only on
|
|
compatible source files; bytecode is retained as evidence, not decoded.
|
|
|
|
Module parsing reads exact metadata ranges rather than loading stored asset
|
|
bodies or whole pages around small pointers. A cache retains at most 256 KiB
|
|
and 1,024 ranges for one reader preparation. Cumulative uncached metadata reads
|
|
default to 256 MiB, checked before allocation or I/O. The module table,
|
|
decoded strings and combined logical path tree have separate admission checks;
|
|
by default at most 250,000 distinct path prefixes are admitted before inventory construction.
|
|
Stored bodies are range-streamed for hashing and extraction. Header/suffix observations are reused
|
|
only for the same admitted file state, with selected-path checks before publication.
|
|
|
|
Both artifact operations accept `artifact_limits.bun`. Its independent controls
|
|
are `payload_bytes`, `module_count`, `representation_bytes`, `metadata_read_bytes`,
|
|
`recognition_table_bytes`, `recognition_load_command_bytes`, `path_parts` and
|
|
`path_nodes`. Failed recognition remains explicitly limited instead of proving
|
|
absence. ELF section names are examined at their actual offsets, including names
|
|
beyond a large section-name prefix. Select `artifact_limits.expanded_bytes` to
|
|
change the aggregate referenced-plaintext work allowance.
|
|
|
|
For a reported metadata-read refusal, keep the same carrier and retry with
|
|
`--artifact-limits '{"bun":{"metadata_read_bytes":536870912}}'` or the equivalent
|
|
MCP `artifact_limits` object. Omitted fields keep defaults. The response names
|
|
the effective limit and exact repair; accepted overrides are reported separately
|
|
from caller selections. Changes apply on the next call without restarting REA.
|
|
Summary and selected extraction do not change the producer's admission.
|
|
|
|
See [limits and recovery](design/limits-and-recovery.md) for admission ceilings.
|
|
Synthetic tests cover the carriers and malformed declarations. Run
|
|
`node scripts/verify-bun-standalone.mjs` after `npm run build:cached` for local Bun
|
|
verification, and add `--docker` to compile a Linux fixture with `oven/bun:1.4.0`.
|
|
Bun and Docker are fixture producers only and are not installed by REA.
|
|
|
|
Layout references: [Bun 1.3.3 serializer](https://github.com/oven-sh/bun/blob/bun-v1.3.3/src/StandaloneModuleGraph.zig)
|
|
and [Bun 1.3.9 serializer](https://github.com/oven-sh/bun/blob/bun-v1.3.9/src/StandaloneModuleGraph.zig).
|
|
|
|
The current 52-byte record order can also be checked in the
|
|
[Bun 1.4.4 Rust serializer](https://github.com/oven-sh/bun/blob/bun-v1.4.4/src/standalone_graph/StandaloneModuleGraph.rs).
|