2.7 KiB
2.7 KiB
External Control Bridge
Zweck
Der External-Control-Bridge-Prozess ist eine duenne generische Prozess-Aussenkante fuer die eingefrorene Show-Control-v1-Semantik.
Er:
- bildet externe Commands auf die bestehenden Show-Control-Primitives ab
- haelt staged Sessions pro
session_id - reicht Host-Fehlercodes unveraendert durch
- fuegt keine neue Geschaeftslogik hinzu
Implementierung:
crates/infinity_host/src/external_bridge.rs- CLI-Einstieg ueber
cargo run -p infinity_host -- external-control-bridge ...
Start
. "$HOME/.cargo/env"
cargo run -p infinity_host -- external-control-bridge --config config/project.example.toml --runtime-state data/runtime_state.json
Der Prozess nutzt stdin/stdout im JSONL-Format:
- eine JSON-Nachricht pro Zeile nach
stdin - eine JSON-Antwort pro Zeile auf
stdout
Request-Form
{
"request_id": "ext-1",
"session_id": "desk-a",
"command": {
"type": "execute_primitive",
"payload": {
"primitive": {
"primitive": "set_pattern",
"payload": {
"pattern_id": "noise"
}
}
}
}
}
Weitere Bridge-Commands:
execute_primitiveget_stateclear_session
Hinweis:
request_snapshotbleibt ein Show-Control-Primitive und laeuft deshalb ueberexecute_primitiveget_stateliefert die read-only State-Projektion ohne Preview
Response-Form
{
"semantic_version": "v1",
"request_id": "ext-1",
"session_id": "desk-a",
"result": {
"type": "primitive_buffered",
"payload": {
"summary": "pattern staged: noise"
}
},
"session": {
"session_id": "desk-a",
"pending": {
"pattern_id": "noise",
"has_group_target": false,
"group_id": null,
"parameters": {},
"transition_style": null,
"transition_duration_ms": null
}
}
}
Moegliche Result-Typen:
primitive_bufferedcommand_acceptedsnapshotstatesession_clearederror
Fehlerverhalten
Primitive-Fehler bleiben unveraendert:
unknown_groupunknown_presetunknown_creative_snapshotgroup_existspersist_failedshow_control_session_requiredtransition_pattern_required
Bridge-spezifische Rahmenfehler:
invalid_bridge_request_jsonsession_id_required
Session-Regeln
- staged Primitive mit
session_idwerden in einer isolierten Session gepuffert - staged Primitive ohne
session_idlaufen absichtlich gegen den stateless Port und liefernshow_control_session_required - direkte Primitive koennen mit oder ohne Session aufgerufen werden
clear_sessionverwirft nur die angegebene Session
Ownership
Die Konflikt- und Ownership-Regeln fuer mehrere Control-Quellen stehen in:
docs/control_ownership.md