The app side of Crafter.Debug, minus the session:
- Command(name, description, handler): the handler takes nothing or
one argument struct and returns void, a value, Result<T> or
Async<T>. Arguments are decoded before it runs, so a mistyped call
is answered with every mistake and never reaches it; a throwing
handler becomes an Exception error instead of unwinding into the
frame loop. This replaces 3DForts' three-file pattern per verb.
- Watch(path, variable | getter [, setter]) with bounds, help and
read-only, and Sample(path, value) from any thread with a
frame-stamped history. Paths resolve into values ("bodies[1].pos.y")
and set the same way, writing a member writes the whole value back.
Unknown paths and commands get a suggestion.
- Group: registrations under a prefix that end with their owner. Not
movable, so neither is its owner: its watches refer to the owner's
members, and a move would leave them pointing at the old object.
- Log, LogWarn, LogError, Check and Emit on one frame-stamped
timeline, with source locations captured without macros. A check
failing every frame is counted every time but stored sparsely, and
the session's listener hears every failure.
- Condition: what `wait` and `pause --when` evaluate each frame. A
condition that cannot be decided reports why instead of being false,
which would make a wait hang.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
19 lines
646 B
C++
19 lines
646 B
C++
// SPDX-License-Identifier: LGPL-3.0-only
|
|
// SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
|
|
|
// Runtime debugging for AI agents: what an app imports. Commands, watches
|
|
// and samples (:Registry), the timeline with Log, Check and Emit
|
|
// (:Timeline), and the conditions waits and pauses use (:Condition), over
|
|
// the core shared with the client. The session follows in a later phase.
|
|
export module Crafter.Debug;
|
|
export import Crafter.Debug.Core;
|
|
export import :Registry;
|
|
export import :Timeline;
|
|
export import :Condition;
|
|
import std;
|
|
|
|
export namespace Crafter::Debug {
|
|
std::string_view Version() {
|
|
return "0.0.0-dev";
|
|
}
|
|
}
|