• feat(#20): characters + me/capabilities/models onto the wt adapter (slice-5)

    vh released this 2026-07-19 11:00:41 -07:00

    Slice-5 of the worldtree-sdk cutover: migrate the remaining consumer READS +
    transient-character CRUD off the hand-rolled httpx wrappers onto the
    ratatoskr.wt adapter over the SDK, and delete the retired path.

    Adapter (wt.py): add get_me / get_capabilities / list_character_models
    / create_character / get_character_state / delete_character over
    client.me / client.capabilities / client.models / client.characters.*.
    All six are open-world reads/acks returned verbatim; none carries a
    discriminated SDK error, so each maps any ApiError → the SessionApiFailed
    default (INV-CUT-2) — exact parity with the retired path. No new Error-map rows.

    Decisions (contract § slice-5 notes): create_character omits state when None
    (SDK-idiomatic inline literal, server-equivalent to the retired explicit null);
    delete_character returns the SDK's open ACK verbatim (-> Mapping|None, not
    normalized to None).

    CLI rewire (cli.py): --whoami (me + capabilities) and --characters
    (models → create → state → delete) build a wt.build_client over the injected
    probe transport and catch wt.SessionApiFailed + ConnectFailed. Open-world
    degrade-not-crash carried (cumulative cutover foot-gun): _characters_probe
    reads items null-safe and extracts character_id defensively (clean abort,
    no hard-index KeyError); _format_whoami widened to Mapping.

    Deleted the six hand-rolled sessions.py wrappers (net -5 mypy no-any-return);
    endpoint_for_plane + get_session_bifrost (slice-6) + the exception classes
    stay. Retired the corresponding test_sessions.py classes; added the slice-5
    adapter tests + a CLI malformed-create-abort test.

    LIVE SMOKE (:8081, b128) — INV-CUT-5 / DEC-4 cleared: --whoami rendered real
    identity + capabilities; --characters drove the full lifecycle end-to-end
    (char-rp catalog → created char_8c00006e… → PAD read-back → deleted).

    Suite 483 green; ruff clean; mypy at the 2 pre-existing baseline errors.
    Patch bump 0.21.15 → 0.21.16 (the cutover MINOR is deferred to slice-7, DEC-6).

    Downloads