| Filename | Latest commit message | Latest commit date |
|---|---|---|
The agent's state/AGENTS.md stays the truth and its harness the only writer. The harness mirrors the file into a new `agents-md` KV bucket, and swarm-controller serves that copy, so a read works while the agent is stopped. An edit is a unified diff plus the revision it was made against, sent over the agent's existing control subject; the harness refuses a stale base, applies the diff with `git apply --check` then `git apply` to a temp copy, and writes the file only when both pass. Fixes #5519. Files: - swarm-queue-client/src/agents_md.rs, lib.rs: the bucket name and subject, the mirror value, the `ApplyAgentsMd` control command and its reply. `AgentControl` loses `Copy` because the new variant carries text. - hive-agent/src/swarm_agents_md.rs, main.rs: the mirror task (start, 10 s re-read, immediate republish after an edit) and the apply. - hive-agent/src/swarm_input.rs: the control loop answers both commands. - hive-agent/src/claude_md_watch.rs: its AGENTS.md path is shared. - hive-agent/Cargo.toml, Cargo.lock: sha1 for the git blob id (already in the lock), tempfile moves from dev to runtime for the apply directory. - swarm-controller/src/agents_md.rs, main.rs: the bucket reader and GET/PUT /api/agents/{name}/agents-md; test AppState literals get the new field. - swarm-controller/src/agent_control.rs: the sink hands back raw reply bytes, so each command decodes its own reply type. - swarm-controller-api/src/agents_md.rs: the route bodies, shared with swarmctl. - swarmctl/src/agents_md.rs, main.rs: `swarmctl agent agents-md get|apply`. - nix/host-modules/swarm-nats.nix, nix/module-eval/nats-authelia.nix: the agent's publish grant on its own `$KV.agents-md.<agent>` key. git needs no new package: agent containers enable programs.git, and the harness unit's PATH includes /run/current-system/sw. |
||
| .. | ||
| src | ||
| Cargo.toml | ||
| README.md | ||
swarm-controller-api
Wire types for swarm-controller's HTTP API, the request and response
bodies both swarm-controller (server) and swarmctl (client) import.
Serde only: no server or client logic, no tokio, no axum.
Why it's its own crate
swarmctl doesn't link swarm-controller, for the same reason hivectl
doesn't link hive-c0re. The two still share one contract, the same way
hivectl and hive-c0re share hive-host-sock: a field renamed on one side
is a compile error on the other, not a 400 the operator finds at runtime.
The schema feature derives utoipa's ToSchema on every type, for the
controller's OpenAPI spec. swarmctl leaves it off.
What's here
One module per endpoint family: agents (the responses of POST /api/agents
and POST /api/agents/{name}/forge-token), forge
(POST /api/forge/users/{name}/admin) and schedules (/api/schedules).
The agent-create request, inference and permissions bodies are still mirrored
by hand in swarmctl.