onescopeDocs
onescope docs
Everything about OneScope 1.0.0: getting started, the shell and its operations, time and forks, watching a running program, writing a module for a library, and the file formats. These docs are for OneScope 1.0.0, read at the v1.0.0 tag (d681be5).
Start
Getting startedInstall the onescope tool, record a short OnePhysics replay, and open it headless: seek to a step, inspect the world and one body, and capture a frame.OverviewA viewer for deterministic libraries. Open a scene, snapshot or replay, or attach to a running program, and watch the world: scrub its history, inspect any entity, compare runs, and fork from any frame to poke at it. One shell, one module per library; physics and navigation…The shell and its operationsonescope is a onegame program. One process holds the opened sources, the scene views and the UI. Everything the shell does is an operation, and the operations are the same from the window, the command line and MCP. Results are JSON.Time, history and forksTime is a step index. Nothing in the SDK reads a clock; playback speed belongs to the viewer.
Watch a running program
Live attachA viewer connects to a probe (see probe-wire.md) and turns its stream into a source that the history re-simulates locally.Probe wire formatWhat a host program's probe and a viewer say to each other over a local socket. The probe carries the library's own replay bytes without reading them; this file covers only the framing around them. All integers are little endian.
Add a library
Writing a moduleA module teaches the shell one library. It is a package in the library's own repository, built against RecursiveAI.OneScope.Sdk (BCL only, no other dependency). The library itself never references onescope. This page is the contract; every public member has an XML doc comment…Fields, links and ghost sourcesFour parts of the SDK contract that a module declares as data. Each is optional: a module built before they existed still loads and runs (every addition is a new member with a default).The test moduleThe test module is a small integer simulation: up to 64 bodies bouncing in a 10 m box (lengths in millimetres), with a stage axis (apply input, gravity, move, bookkeeping). All integers are little endian.Public APIGenerated by tools/ApiList from the built assemblies; every member has an XML doc comment in the source (units, limits, exceptions).
Files and formats
Session fileThe open sources of a session, the forks with their poke replays, the shared time cursor, and an opaque blob the shell uses for layout and cameras. All integers are little endian. Reading a session and writing it again gives the same bytes.Pose cacheA pose cache holds the positions and orientations of a fixed set of things over consecutive steps, with no simulation behind them: a reference engine's pose dump, a baked clip. The shell opens one as a ghost source (see fields-links-ghosts.md). The reader is…Fuzzingtools/Fuzz is a coverage-guided harness for the three formats onescope parses from untrusted bytes: the probe handshake and stream frame headers (handshake), the .oscope session file (session) and the pose cache (posecache). It uses SharpFuzz with AFL++, and it is a test tool…
Project
Building and releasingEverything the app, samples and tests reference comes from nuget.org: onegame's packages, the libraries the bundled modules sit on, and the modules themselves. tools/check-packages.sh reads the pinned versions (Directory.Packages.props and the tests' VersionOverride…ChangelogWhat changed in each release, newest first. The libraries (RecursiveAI.OneScope.Sdk, .Probe and .Attach) are released with a v tag, under a ## [] heading; the tool (RecursiveAI.OneScope.Tool) with a tool-v tag, under ## [tool ].