@swift-agents/agent-47
v0.1.0
Published
On-demand React Native UI capture and redacted scrape dispatch for SwiftAgents.
Readme
@swift-agents/agent-47
Agent-47 performs on-demand, redacted UI capture and dispatches the completed scrape only through @swift-agents/core. It never calls fetch, opens a WebSocket, polls, or continuously crawls the UI.
Install
npm install @swift-agents/core @swift-agents/agent-47Initialize Core before registering a root or requesting capture. The package
entry is src/index.ts; tests, backend code, and unrelated app files are
excluded from the package allowlist. The unpublished artifact is intentionally
marked UNLICENSED until the project license is selected.
Supported capture boundary
React Native does not expose a portable recursive accessible-node-tree API. This package therefore does not pretend that AccessibilityInfo can provide one, and it does not inspect private React renderer internals.
Provide either:
- a native-backed Agent47CaptureAdapter that walks the native subtree rooted at a registered host view; or
- the documented hybrid registration mechanism below.
const rootId = agent47.registerRoot(rootRef, { id: "checkout" });
agent47.registerNode({
rootId,
id: "submit",
type: "Pressable",
visible: true,
interactive: true,
bounds: null,
measureInWindow: () => measureNativeRef(submitRef),
});
await agent47.capture({ rootId });The measureInWindow callback must be backed by a real native React Native view. Agent-47 does not attach refs to arbitrary custom components or rely on ref forwarding.
Output and privacy
Capture output is a flat ordered tree with type, optional text/id/key, visible, interactive, bounds, and depth. Password, explicitly sensitive, and safely identified card/payment fields have their text replaced with [REDACTED]. Hosts can provide an additional redact callback.
Capture is strictly on demand. A successful capture is dispatched as:
await core.dispatch({
type: "scrape",
data: { tree, event: "on_demand_capture" },
});The package performs this dispatch internally; it has no server transport of its own.
