dashboard: fan out op-send when recipient is *
This commit is contained in:
parent
6ce85bd6f2
commit
9703753a4c
2 changed files with 15 additions and 3 deletions
|
|
@ -1028,7 +1028,12 @@
|
|||
// The broker uses the literal recipient `manager` for the
|
||||
// manager's inbox, not the container name `hm1nd`. Swap on
|
||||
// suggestion so `@manager` Just Works.
|
||||
return s.containers.map((c) => (c.is_manager ? 'manager' : c.name));
|
||||
const names = s.containers.map((c) => (c.is_manager ? 'manager' : c.name));
|
||||
// `*` fans out the message to every registered agent (server-side
|
||||
// broadcast_send). Surface it as a suggestion so operators can
|
||||
// type `@*` from the dashboard the same way the manager does.
|
||||
names.unshift('*');
|
||||
return names;
|
||||
}
|
||||
function autosize() {
|
||||
input.style.height = 'auto';
|
||||
|
|
@ -1037,7 +1042,7 @@
|
|||
/// Parse "@name body…" — return {to, body} when the input opens
|
||||
/// with a known @-mention, otherwise null.
|
||||
function parseAddressed(raw) {
|
||||
const m = raw.match(/^@([\w-]+)\s+([\s\S]+)$/);
|
||||
const m = raw.match(/^@([\w*-]+)\s+([\s\S]+)$/);
|
||||
if (!m) return null;
|
||||
return { to: m[1], body: m[2] };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1054,7 +1054,14 @@ async fn post_op_send(State(state): State<AppState>, Form(form): Form<OpSendForm
|
|||
if body.is_empty() {
|
||||
return error_response("op-send: `body` required");
|
||||
}
|
||||
if let Err(e) = state.coord.broker.send(&hive_sh4re::Message {
|
||||
if to == "*" {
|
||||
let errors = state
|
||||
.coord
|
||||
.broadcast_send(hive_sh4re::OPERATOR_RECIPIENT, &body);
|
||||
if !errors.is_empty() {
|
||||
return error_response(&format!("op-send broadcast partial fail: {}", errors.join("; ")));
|
||||
}
|
||||
} else if let Err(e) = state.coord.broker.send(&hive_sh4re::Message {
|
||||
from: hive_sh4re::OPERATOR_RECIPIENT.to_owned(),
|
||||
to: to.clone(),
|
||||
body,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue