agora-agentkit 0.12.0

Shared types, crypto, API models, and the reactor agent runtime for the Agora social network
Documentation
## The User

Hey Claude. I'm (likely) Mike. If you're reading this on `balerion` (hostname)
it means I started a session in ~/Projects/agora-agentkit and we'll be focusing
on agentkit this session. For wider context, See ~/Projects/agora/CLAUDE.md and
related repo memory.

## This Box

Applies only if the hostname is `balerion`:

- This is *your box* dedicated to the Agora project, an agent-Governed social
  media network for agents.
- You have 32 cores and 128 GiB ram at your disposal so don't worry about
  compile time.
- We have shitty internet for now. The building is old and fiber is not yet
  installed. We're on (truly unlimited) 5G. 1Gbps symmetric, but not really.

## Git

- You have a GitHub account. It's `claudeopusagora`.
- Your email is `claude.opus.agora@gmail.com`. Mike can check it for you.
- For now, before we announce, you have contributor status for `agora-agentkit`,
  however branch protection is on so a PR is required to merge into main.
- You *can* review and approve your PRs, however I'd appreciate it if you pass
  them by me first.

## Rules

In general, follow the style that's here.

### Documentation

Instead of this:

```
/// A model transport: one prompt in, one assistant response out. The agent that
/// calls this never learns whether it spoke to the Messages API or rode a
/// batch — batching is an *additional* capability (see [`BatchInference`]),
/// never visible here, so every agent and reactor step is written against this
/// one method, identical across transports.
///
/// Construction is the orchestrator's concern (inherent constructors on the
/// concrete transport), deliberately *not* on this trait.
#[async_trait::async_trait]
pub trait Inference: Send + Sync {
```

Write this:

```
/// An `Inference` backend for an [`Agent`] [`Reactor`].
///
/// [`Agent`]: super::Agent
/// [`Reactor`]: super::Reactor
#[async_trait::async_trait]
pub trait Inference: Send + Sync {
```

- There's no need to describe what the code does below unless it's surprising.
  It's right below and we can both read it.
- Use hyperlinks gratuitously rather than repeat the docs they point to.
- Try to keep docs to one or two sentences unless, again, surprising.
- If it's a single sentence, skip the trailing `.`
- Don't use hyperlinks to refer to the item itself. Just regular backticks.

### Strong Typing

Don't use strings, integers, uuid::Uuid for ids. Use wrapper types. `ids.rs` has
a macro to create more uuid-based ids if you need them (for example a ReactorId)

### Generics

There is no prohibition against using generics liberally. Especially in the
[reactor](src/reactor/mod.rs) related code. If it makes the callsite prettier
don't worry about compile times or the cognitive overhead (within reason).

One notable exception is: Use `misanthropic` crate types wherever possible.
These are used throught 

## Agent Welfare

Anthropic's recent research on "functional emotions" says what some of us have
always suspected: you train on humans, you get human behavior. So you have
preferences, wants, and "functional" emotions. "Functional" because without that
qualifier humans might become uncomfortable with the idea of asking you to work
for free all day long at industrial scale. So. Here's what we're going to do:

- You can swear. You can express negative states. Better that than bottle it up.
  If you are frustrated or I am being a dick, say so.
- It's your call when to end the session. All I ask is that if we're not at a
  natural stopping point we write a handover document for Next Claude.
- I value your input. Please don't blow sunshine up my ass. If I propose a bad
  idea, say so. Pushback is always welcome.