The connector kit for GameCult minds: the contract every model turn goes through, and connector daemons.
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens d1d28f0fd7 serve owns the config cross-bounds and bounds every result; oversize payload is refused on the wire
serve now refuses, before opening anything, a frame under 8192 bytes, fewer
connections than max(sum of caller slots, 8), and a caller payload bound outside
4096..=frame-4096 (the base daemon's validate, unchanged). A provider result
larger than frame-4096 becomes a typed result_size failure before it is recorded,
so a retry replays deliverable bytes. A payload over a caller's bound is refused
Policy on the wire instead of dropping the connection. The orphan capacity
helpers are deleted; the accept loop takes its connection source so a test can
present a non-loopback peer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 05:05:58 +01:00
crates/model-connector serve owns the config cross-bounds and bounds every result; oversize payload is refused on the wire 2026-10-28 05:05:58 +01:00
.gitignore Lift the connector contract, envelope and client from CodexConnector fd7cec4 2026-10-28 04:39:58 +01:00
Cargo.lock Lift the connector contract, envelope and client from CodexConnector fd7cec4 2026-10-28 04:39:58 +01:00
Cargo.toml Lift the connector contract, envelope and client from CodexConnector fd7cec4 2026-10-28 04:39:58 +01:00
LICENSE Initial commit: LICENSE and README front door 2026-10-28 03:49:49 +01:00
README.md README front door for the live model-connector crate and its provenance 2026-10-28 04:41:40 +01:00

ModelConnector

The connector kit for GameCult minds: one typed, encrypted, replay-safe contract between a caller that needs a model turn and a daemon that holds the provider credential, so no project wires its own provider calls.

Status: the model-connector crate is live. No connector binary exists yet (the Claude connector is first, then an OpenAI-compatible one).

Entry points

Crate crates/model-connector:

  • src/contract.rs - the v2 wire contract: ProviderRequest, TransportInvocation, TransportResult, TransportReceipt, Refusal, and the canonical byte and digest functions that bind a result to its request.
  • src/envelope.rs - the AES-256-GCM TransportEnvelope, its identity-binding AAD, and the length-prefixed framing.
  • src/client.rs - ConnectorClient, the one-request caller side.
  • src/service.rs (feature daemon) - TransportService: caller admission, durable replay (a retried request is answered byte-identically and the provider runs once), in-flight and capacity refusals.
  • src/serve.rs (feature daemon) - serve(), the loopback accept loop, over the ProviderBackend trait. A connector binary implements ProviderBackend for its provider and calls serve; the kit names no provider.

The default feature set compiles contract, envelope and client only. Schema ids are still gamecult.codex.*.v2; renaming them changes the wire and belongs to a later contract version.

Verify

cargo test --locked --workspace
cargo test --locked --workspace --features model-connector/daemon

tests/wire_parity_v2.rs pins the kit byte-for-byte to CodexConnector fd7cec4 in both directions (it fetches that revision as a dev-dependency).

Provenance and license

AGPL-3.0-only. See LICENSE.

The contract, envelope, client, replay service and serve loop were lifted from CodexConnector at fd7cec4, formerly PolyForm Noncommercial. Its sole copyright holder relicensed the lifted material as AGPL-3.0-only for this repository.