polyc-agent 2026.9.0

The agent turn loop: provider + tool-call routing, shared by the control plane and harness.
[package]
name = "polyc-agent"
version.workspace = true
description = "The agent turn loop: provider + tool-call routing, shared by the control plane and harness."
edition.workspace = true
license.workspace = true
authors.workspace = true
rust-version.workspace = true
repository.workspace = true

[package.metadata.polychrome]
# Software-system layer — see docs/architecture/. A Component composed
# into Containers; depends inward only (never on a Container).
layer = "component"
# Logical plane role in the separated state, projection, and query topology
# (#1565, chunk A1) — a different question than `layer` above. The canonical
# policy is arch-capabilities.toml; scripts/check_plane_capabilities.py checks it.
plane_role = "shared"

[dependencies]
# The shared args canonicalizer (`polyc_crypto::canon`) the approval binding
# compares with — one implementation with the payment proxy, so the two
# binding domains cannot drift.
polyc-crypto = { version = "=2026.9.0", path = "../crypto" }
polyc-capability = { version = "=2026.9.0", path = "../capability" }
polyc-llm = { version = "=2026.9.0", path = "../llm" }
prometheus = { workspace = true }
polyc-proto = { version = "=2026.9.0", path = "../proto" }
# Validates a delegated worker's schema-forced final answer against the
# model-supplied `result_schema` (#871). Pure leaf dependency — no layer
# concerns beyond the usual foundation-of-foundations third-party crates.
# Renders a worker's turn-start stamp (#1323) from the parent turn's frozen
# dispatch clock — the same crate + pin `polyc-control-plane` uses for the
# top-level turn-start system message, so the two render identically.
jiff.workspace = true
jsonschema.workspace = true
buffa.workspace = true
buffa-types.workspace = true
async-trait.workspace = true
futures.workspace = true
serde.workspace = true
serde_json.workspace = true
thiserror.workspace = true
tracing.workspace = true
# Needed for the `CURRENT_TOOL_CALL_ID` task-local (scoped around tool
# execution so the harness payment proxy can correlate without an
# `ToolExecutor::execute` signature change). Macros/rt are also used by tests.
tokio = { workspace = true, features = ["macros", "rt", "time"] }

[features]
# Golden-vector schema (`src/golden_vectors.rs`) shared by this crate's own
# compaction-recall tests and the control-plane pipeline tier (#1298).
# Never a default feature — an integration test binary links the lib without
# `--cfg test`, so a feature is the only way to reach a test-only `pub`
# item; the self-edge below turns it on for this crate's own test builds
# only, never for a normal (non-dev) build.
test-fixtures = []

[dev-dependencies]
# Owns the shared, cross-language golden vector JSON this crate's compaction
# recall eval reads — see crates/conformance-vectors.
polyc-conformance-vectors = { version = "=2026.9.0", path = "../conformance-vectors" }
# The model-backed tier of the compaction recall eval
# (tests/compaction_recall.rs) drives the real summarizer against a live
# chat-completions-compatible endpoint. Dev-only: the production crate stays
# provider-agnostic behind the `LlmProvider` trait.
polyc-llm-openai = { version = "=2026.9.0", path = "../llm-openai" }
# Self-edge enabling `test-fixtures` for this crate's OWN test targets
# (tests/compaction_recall.rs) — see the feature's doc comment above.
polyc-agent = { path = ".", features = ["test-fixtures"] }

[lints]
workspace = true