The developer inspector attaches Chrome DevTools to a running DataMind Oda app, so you can debug its host process and its connected browser clients from one DevTools window. It is development tooling for a checkout, not part of the everyday app, and it listens on this computer only.
For running, approving, stopping and removing dynamic packages, see Dynamic packages.
The inspector joins one run through an overlay file; nothing is installed into your profile.
pnpm run build. The overlay loads the inspector from the build output.oda --profile web --patch . / packages/ experimental/ inspector/ cordis. patch. ymldevtools:/ / address the app logs once the inspector listens. Chrome DevTools attaches to the run and opens on the Elements panel.From a source checkout, pnpm run demo:inspector starts the same web mode with a source overlay instead of the built one.
Once it listens, the inspector serves these addresses on one local port:
| Address | What it answers |
|---|---|
/, / | The DevTools discovery documents. |
/ | The version document for the protocol. |
/ | The target socket DevTools attaches to. |
/ | The socket a browser client connects to. |
A browser client joins as a source over the ingest socket, keeps its buffered observations across reconnects, and sends them in bounded frames and queues.
fetch calls with the full URL, all request and response headers, bodies, status, timing, errors and cancellation. Bodies are kept as a prefix and marked truncated at the configured limits, and an aborted request keeps the bytes captured so far.<host> container, and a <clients> container with one <client> entry per connected client. The tree loads level by level, and levels you expand load on demand.These are the inspector's fields, with their defaults. Set a field in the inspector's entry in your overlay when a default does not fit the run:
| Field | Default | Meaning |
|---|---|---|
host | 127. | The bind address; only a loopback address is accepted. |
port | 9230 | The first port tried; a busy port steps up to the next free one, and 0 asks the operating system to assign one. |
clientOrigins | empty | Extra browser origins accepted by the ingest endpoint, given exactly; loopback origins are always accepted. |
captureFetch | on | Record the host's fetch calls after the inspector starts. |
maxRequestBodyBytes | 8 MiB | The request-body prefix kept for each request. |
maxResponseBodyBytes | 32 MiB | The response-body prefix kept for each request. |
maxBodyChunkBytes | 48 KiB | Raw bytes carried in one body record. |
maxJournalBytes | 256 MiB | Total body bytes the inspector keeps. |
maxRetainedRequests | 2000 | Active and completed requests kept. |
maxSourceFrameBytes | 128 KiB | The largest encoded source frame. |
startupTimeoutMs | 10 s | How long the start waits for the inspector to be ready. |
stopTimeoutMs | 5 s | The window for a graceful shutdown before it is ended. |
clientReconnectBaseMs | 250 ms | The starting client reconnect backoff. |
clientReconnectMaxMs | 5 s | The largest client reconnect backoff. |
clientRuntimeTimeoutMs | 30 s | Deadline for one runtime or sources command sent to a client. |
queryTimeoutMs | 10 s | Deadline for one non-DevTools query. |
Inspector Client query socket is not connected: a query was sent while the client's socket was between connections. Wait for it to reconnect and try again.inspector: Client source is closed: the client side was already closed when it tried to update its state, as happens during teardown. Reload the page if the client should still be connected.[inspector] Client source rejected: <message>: the inspector refused a browser client as a source; the message carries the reason, and the client closes that connection and retries with backoff.inspector protocol: Worker frame exceeds <n> bytes: an incoming frame was larger than the frame limit; the connection closes and reconnects with backoff.Client source result exceeds the source-frame byte limit: a sources answer did not fit in one frame and was refused. Read less at once, or raise maxSourceFrameBytes.Client debugging is not supported. A client offers console entries, evaluation and read-only sources; breakpoint, step and call-frame requests are refused, and pause and resume control the host only.
The capture covers the host's fetch calls only. Direct low-level HTTP client calls and fetch references the app kept before the inspector started are not observed, and a client page's own requests are not captured.
9230 by default. A busy port steps up to the next free one, and 0 asks the operating system to assign one; set port in the overlay to start somewhere else.
Yes. Fetch capture records headers, bodies and query values without redaction, so credentials, cookies and payloads can appear. Treat captures as sensitive and keep the inspector on this computer.
Treat it as full access to the app while it runs: anything attached can run code in the host and its clients, the DevTools socket has no token, and loopback binding is its only access control. Stop the run when you are done.
Yes. The tree read needs no session and no other domain enabled, so it can come from a script or a plugin as well as from the DevTools window.
Its console context and live object handles are destroyed at once, and its tree stays as the last snapshot until it reconnects and sends a new one. The inspector keeps up to eight disconnected trees.
The body limits keep a prefix of each request and response and mark the rest truncated. Raise maxRequestBodyBytes or maxResponseBodyBytes in the overlay if you need more.
No. It observes runtime activity without changing model requests.