YAML configuration, init without a wizard, and openai-chat-completions
ci / check (push) Successful in 15m52s

- /config/agent.yaml and /config/boot.yaml replace the JSON files, read
  with serde_yaml_ng (also in the agent, inside WASM).
- sausage init asks nothing and reads no SAUSAGE_* variables. It writes
  commented templates with an example for each API, and prints the path
  to edit. Until the agent is configured, agent.chat names the missing
  field. allow_no_token: true permits a local model without a key.
- The agent speaks openai-chat-completions, the format of OpenRouter,
  Ollama, and most providers. base_url follows each SDK: with /v1 for
  the OpenAI shapes, without it for Anthropic.
- Checked against the proxy with glm-5.3-flash: the agent wrote, built,
  and activated a counter plugin in 55 s.
This commit is contained in:
2026-10-23 11:27:48 +01:00
parent ab1adbd5e3
commit b536beb069
19 changed files with 481 additions and 123 deletions
+6 -6
View File
@@ -667,8 +667,8 @@ async fn reserved_world_roots_prevent_startup() {
async fn boot_waits_for_readiness_in_order() {
let w = TestWorld::new();
std::fs::write(
w.0.join("config/boot.json"),
serde_json::to_vec(&json!([
w.0.join("config/boot.yaml"),
serde_yaml_ng::to_string(&json!([
{"method":"probe.write","params":{"path":"/state/boot","text":"ready"}},
{"method":"probe.read","params":{"path":"/state/boot"}}
]))
@@ -1399,7 +1399,7 @@ async fn failed_boot_services_are_logged_and_boot_continues() {
{"method":"probe.write","params":{"path":"/state/continued","text":"yes"}}
]);
std::fs::write(
w.0.join("config/boot.json"),
w.0.join("config/boot.yaml"),
serde_json::to_vec(&services).unwrap(),
)
.unwrap();
@@ -1423,7 +1423,7 @@ async fn failed_boot_services_are_logged_and_boot_continues() {
async fn boot_services_are_detached() {
let w = TestWorld::new();
std::fs::write(
w.0.join("config/boot.json"),
w.0.join("config/boot.yaml"),
br#"[{"method":"probe.serve","params":{}}]"#,
)
.unwrap();
@@ -1855,7 +1855,7 @@ async fn nested_parent_environment() {
async fn service_parent_environment() {
let w = TestWorld::new();
std::fs::write(
w.0.join("config/boot.json"),
w.0.join("config/boot.yaml"),
br#"[{"method":"probe.forgotten","params":{}}]"#,
)
.unwrap();
@@ -1936,7 +1936,7 @@ async fn detached_processes_need_explicit_termination() {
async fn core_exit_sets_executable_status_75() {
let w = TestWorld::new();
std::fs::write(
w.0.join("config/boot.json"),
w.0.join("config/boot.yaml"),
br#"[{"method":"core.exit","params":{}}]"#,
)
.unwrap();