1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
[]
= "polyc-tools"
= "The in-process tool core for polychrome agents: local executors (coding, web fetch, wallet, ...), the tool registry, and MCP composition. The networked connectors live in polyc-connectors."
= true
= true
= true
= true
= true
= true
[]
# Software-system layer — see docs/architecture/. A Component composed
# into Containers; depends inward only (never on a Container).
= "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.
= "shared"
[]
= { = "=2026.9.0", = "../capability" }
= { = "=2026.9.0", = "../agent" }
= { = "=2026.9.0", = "../crypto" }
= { = "=2026.9.0", = "../llm" }
= true
= true
= true
= true
= true
# `grep` coding tool — battle-tested Rust regex (linear-time guarantees).
= "1"
# Model Context Protocol SDK. Both client and server are wired through the
# streamable-HTTP transport — the client wraps a remote MCP server as an
# extra `ToolExecutor`; the server exposes our tools to outside MCP clients.
# rmcp's client transport links the same `reqwest` 0.13 line as the workspace,
# so we inject our own client (below) to bound the dial.
= { = "3", = [
"client",
"server",
"transport-streamable-http-client-reqwest",
"transport-streamable-http-server",
] }
# Build the streamable-HTTP client ourselves so the dial carries a bounded
# `connect_timeout` (rmcp's default client has none). Same `reqwest` 0.13 line
# rmcp 2.0 links, so injecting our `reqwest::Client` into `with_client` satisfies
# its `StreamableHttpClient for reqwest::Client` impl with no version skew.
= { = true }
# `HeaderName`/`HeaderValue` for the caller-identity header on a connector
# dial (`ConnectOptions::caller`) — the same `http` line rmcp's transport
# takes `custom_headers` in.
= true
= { = true, = [
"rt-multi-thread",
"macros",
"net",
"signal",
"process",
"time",
] }
= { = true }
# MCP server transport (`serve`) is axum-based; anyhow surfaces its bring-up
# errors.
= { = true }
= { = true }
# Standard gRPC health-checking service (`grpc.health.v1.Health`), mounted
# alongside the MCP streamable-HTTP service in `serve()` so a connector gets a
# real `grpc:` readiness/liveness probe — see `crates/control-plane` and
# `crates/harness` for the same pattern.
= { = true }
= { = true }
[]
# Round-trip integration test: spin our server in-process, connect via the
# client wrapper, run the executor end-to-end. No external services.
= { = true, = ["test-util"] }
# Drive the `serve()` health-check router via `ServiceExt::oneshot` in unit
# tests, without binding a socket.
= { = "0.5", = ["util"] }
[]
= true