mirror of
https://github.com/morluto/rea.git
synced 2026-11-08 07:46:28 +00:00
* docs: organize canonical documentation layout (URGENTE) Group all existing authored guides by domain and ownership, expose complete navigation, and preserve their public routes. Update physical path consumers and release configuration while retaining historical records. Document domain-based specs and ADR slugs without global numbering. Co-Authored-By: Codex <noreply@openai.com> * fix(docs): honor home layout in all-page route verification * style: format reviewed source changes * fix(docs): preserve routes and navigation cache inputs * fix: repair the static-check failures on the default branch (#2895) * fix: repair the static-check failures on the default branch The default branch fails its own required `Static checks` job three ways, so every pull request reports that job as failed regardless of its own change. - `npm run format:check` reports `src/domain/functionComparison.test.ts` and `src/ida/IdaOperationRunner.ts`. - `npm run lint` reports a duplicate `import { join } from "node:path"` in `tests/boundary/mcp/ghidraInventoryMcp.test.ts` (lines 4 and 17). - `npm run typecheck` reports `format: "devin"` missing from the client format union in `src/application/SupportedClients.ts`, and an unchecked index in `tests/boundary/cli/clientProfileLifecycle.test.ts`, whose pair array is inferred as `string[][]`. Apply the pinned formatter, drop the duplicate import, list the `"devin"` format that its own definition already uses, and mark the pair array `as const`. Validation: `npm run check:fast` and `npm run format:check` pass. * fix(setup): keep Devin on the JSON configuration dialect --------- Co-authored-by: 吴佳浩 <wujiahao@supremind.com> Co-authored-by: morluto <76467478+morluto@users.noreply.github.com> * fix(docs): update links after guide relocation * docs: correct verified documentation route counts * fix(docs): update browser capture guide link after move (#2820) Refresh gettext protected-link comments alongside the authored href. Co-authored-by: Codex <noreply@openai.com> * fix(docs): include http3 lab in stable routes * fix(docs): preserve historical release evidence and links * fix(ghidra): restore Windows verifier identity import * docs(wakaru): preserve pinned upstream policy link * docs(index): retain recently added guide links * docs(mcp): preserve parent retention clarification * fix(cli): preserve standalone import guidance * fix(test): preserve translated guide link drift coverage --------- Co-authored-by: Matheus Breguêz <matbrgz@gmail.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: morluto <17176810+morluto@users.noreply.github.com> Co-authored-by: 吴佳浩Alben <35291372+XiaoBinGan@users.noreply.github.com> Co-authored-by: 吴佳浩 <wujiahao@supremind.com>
101 lines
5.5 KiB
Markdown
101 lines
5.5 KiB
Markdown
# Captured website scripts and static JavaScript analysis
|
|
|
|
`export_web_scripts` bridges retained browser sources into the existing local
|
|
JavaScript analyzer. Both CLI and MCP use the same workflow. It reads a saved
|
|
`inspect_web_page` or `capture_browser_scenario` capture and writes scripts plus a
|
|
verified manifest into one caller-selected, absent directory.
|
|
|
|
## Capture and export
|
|
|
|
For passive inspection, select `include_script_sources: true` (CLI:
|
|
`--include-script-sources`). For scenarios, select
|
|
`capture.network.response_body: true`. Save either the complete Evidence record
|
|
or its normalized result as UTF-8 JSON. MCP `structuredContent` contains the complete Evidence record.
|
|
|
|
The capture must be a regular file. A symlink to a regular file is accepted;
|
|
directories, named pipes and device files are rejected before reading capture
|
|
bytes or creating output.
|
|
|
|
```sh
|
|
rea export-web-scripts /analysis/capture.json /analysis/exported-scripts --json
|
|
rea analyze-javascript-application /analysis/exported-scripts/files --json
|
|
```
|
|
|
|
MCP uses `export_web_scripts` with `capture_path` and `output_directory` absolute
|
|
filesystem paths. Its inline result includes `analysis_input`, which can be
|
|
passed directly to `analyze_javascript_application`. When no script bytes are
|
|
exportable, `analysis_input` is null and the manifest retains the unavailable
|
|
sources and their reasons. Capture again with the corresponding content option.
|
|
|
|
The destination must not exist. Use a new directory for each capture; an
|
|
existing directory or symlink is rejected without overwriting its contents.
|
|
REA creates private output, verifies every written file by digest and durable
|
|
readback, and removes its own partial output on failure or cancellation.
|
|
A failed rollback reports residual paths.
|
|
|
|
## Sources and mappings
|
|
|
|
Every source is returned inline with its URL and its script/frame identity or
|
|
request transaction and event sequence references. The result also contains
|
|
the input capture's byte digest, original coverage, source Evidence link when
|
|
provided, and the persisted manifest's digest and byte count. A saved Evidence
|
|
envelope must have a valid semantic identifier and matching operation.
|
|
|
|
Exported `relative_path` values are relative to `analysis_input.input_path`.
|
|
The persisted `manifest.json` contains the same inline manifest fields, excluding
|
|
its own descriptor. It does not duplicate script bytes.
|
|
|
|
- Passive sources are the Debugger-exposed text encoded as UTF-8, with the
|
|
verified source digest and source-map declaration retained. Unavailable or
|
|
explicitly non-JavaScript sources remain unavailable.
|
|
- Scenario sources use observed requests classified as `script`, associated
|
|
with one response event and the bytes returned by Playwright's
|
|
`Response.body()` API for its response object. URLs never select the response.
|
|
Playwright may load the request URL again with credentials when CDP has no
|
|
response body, so transaction and event references do not verify that
|
|
exported bytes came from the original network transaction. The capture and
|
|
export manifest retain this limitation. Binary and empty retained bytes are
|
|
written exactly.
|
|
- Ordinary query-free `.js`, `.mjs`, and `.cjs` URL paths are arranged under a
|
|
directory for each origin, preserving their relative module layout when it
|
|
is unambiguous.
|
|
- Competing versions, query/fragment variants, and file/directory prefix
|
|
collisions, inline sources, and unrepresentable paths use unique isolated
|
|
names with a stated reason. Missing competing sources also prevent selection
|
|
of an apparently canonical version.
|
|
- Case-distinct URL spellings keep their relative paths when the destination
|
|
filesystem can store both. If a later spelling collides at publication, that
|
|
record is isolated while an earlier canonical spelling can remain. Read each
|
|
record's `layout`, `relative_path`, and `layout_reason`; case isolation depends
|
|
on the destination, unlike preplanned exact-path/version isolation.
|
|
|
|
## Interpretation and limits
|
|
|
|
Export does not fetch URLs or execute JavaScript. Retained Debugger sources and
|
|
response bytes do not establish execution or a complete website. Scenario
|
|
response bytes preserve Playwright's body API result; see the source-body
|
|
identity limitation above. Declared
|
|
redaction is preserved and can change JavaScript syntax; passive captures do
|
|
not report a byte-redaction flag, so that value remains unknown.
|
|
|
|
The existing analyzer inventories and parses the actual exported files. It can
|
|
resolve ordinary captured relative modules, but does not implement browser
|
|
import maps, root-relative URL loading, remote imports, or runtime behavior.
|
|
Its local resolver may strip import queries/fragments; isolated variants are
|
|
kept away from canonical paths to prevent those from selecting a different
|
|
observed version. Missing dependencies remain unknown. Source maps are not
|
|
fetched or reconstructed during export.
|
|
|
|
The export Evidence describes a derivation from the saved capture. Subsequent
|
|
application-analysis Evidence describes the local exported artifact. Their
|
|
identities and authorities remain separate.
|
|
|
|
## Verification
|
|
|
|
`npm run verify:browser:scripts` exercises active capture, exact source export,
|
|
manifest readback, query variants, and relative-module analysis through a real
|
|
browser, CLI, and stdio MCP. Set `REA_BROWSER_EXECUTABLE` to an installed
|
|
Chrome-family browser. The verifier accepts an optional installed REA entrypoint
|
|
argument for package verification. `npm run verify:browser` additionally covers
|
|
passive `inspect_web_page` export through both public adapters.
|