Introduce stable_id = role on AgentMetadata so learning profiles and KG
execution records survive process restarts and hot-reloads. Previously
every Uuid::new_v4() rotation orphaned accumulated expertise.
- registry: add stable_id field (serde default, backward-compatible),
stable_id_or_role() fallback helper, drain_role(), list_roles()
- coordinator: profile lookup and KG writes use stable_id_or_role()
instead of the ephemeral UUID; drain_role() drops Sender to close
mpsc channels after in-flight messages drain; registry_arc() accessor
- executor: agent_id written to KG now uses stable_id_or_role()
- server: reload_agents() drain-and-respawn function; SIGHUP handler
via while sighup.recv().await.is_some(); POST /reload endpoint;
AppState extended with config_path, router, cap_registry
- fix: SIGHUP recv() spin-loop guard (is_some())
- fix: io_other_error clippy lint in vapora-agents, vapora-llm-router,
vapora-workflow-engine (std::io::Error::other instead of Error::new)
- docs: ADR-0040, CHANGELOG entry, README hot-reload section
38 lines
672 B
Text
38 lines
672 B
Text
let C = import "../nickel/vapora/contracts.ncl" in
|
|
|
|
{
|
|
server | C.ServerConfig = {
|
|
host = "127.0.0.1",
|
|
port = 3000,
|
|
tls = {
|
|
enabled = false,
|
|
cert_path = "",
|
|
key_path = "",
|
|
},
|
|
},
|
|
|
|
database | C.DatabaseConfig = {
|
|
url = "ws://localhost:8000",
|
|
max_connections = 10,
|
|
},
|
|
|
|
nats | C.NatsConfig = {
|
|
url = "nats://localhost:4222",
|
|
stream_name = "vapora-tasks",
|
|
},
|
|
|
|
auth | C.AuthConfig = {
|
|
jwt_secret = "change-in-production",
|
|
jwt_expiration_hours = 24,
|
|
},
|
|
|
|
logging | C.LoggingConfig = {
|
|
level = "info",
|
|
json = false,
|
|
},
|
|
|
|
metrics | C.MetricsConfig = {
|
|
enabled = true,
|
|
port = 9090,
|
|
},
|
|
}
|