fix(ui): replace Manual RPC text input with sorted method dropdown (#14967)

Merged via squash.

Prepared head SHA: 1bb49b2e64
Co-authored-by: rixau <112558420+rixau@users.noreply.github.com>
Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com>
Reviewed-by: @BunsDev
This commit is contained in:
Austin
2026-03-10 02:30:31 -04:00
committed by GitHub
parent 5296147c20
commit 9d403fd415
3 changed files with 16 additions and 5 deletions

View File

@@ -118,6 +118,7 @@ Docs: https://docs.openclaw.ai
- MS Teams/authz: keep `groupPolicy: "allowlist"` enforcing sender allowlists even when a team/channel route allowlist is configured, so route matches no longer widen group access to every sender in that route. Thanks @zpbrent.
- Security/system.run: bind approved `bun` and `deno run` script operands to on-disk file snapshots so post-approval script rewrites are denied before execution.
- Skills/download installs: pin the validated per-skill tools root before writing downloaded archives, so rebinding the lexical tools path cannot redirect download writes outside the intended tools directory. Thanks @tdjackey.
- Control UI/Debug: replace the Manual RPC free-text method field with a sorted dropdown sourced from gateway-advertised methods, and stack the form vertically for narrower layouts. (#14967) thanks @rixau.
## 2026.3.7

View File

@@ -1081,6 +1081,7 @@ export function renderApp(state: AppViewState) {
models: state.debugModels,
heartbeat: state.debugHeartbeat,
eventLog: state.eventLog,
methods: (state.hello?.features?.methods ?? []).toSorted(),
callMethod: state.debugCallMethod,
callParams: state.debugCallParams,
callResult: state.debugCallResult,

View File

@@ -9,6 +9,7 @@ export type DebugProps = {
models: unknown[];
heartbeat: unknown;
eventLog: EventLogEntry[];
methods: string[];
callMethod: string;
callParams: string;
callResult: string | null;
@@ -71,14 +72,22 @@ export function renderDebug(props: DebugProps) {
<div class="card">
<div class="card-title">Manual RPC</div>
<div class="card-sub">Send a raw gateway method with JSON params.</div>
<div class="form-grid" style="margin-top: 16px;">
<div class="stack" style="margin-top: 16px;">
<label class="field">
<span>Method</span>
<input
<select
.value=${props.callMethod}
@input=${(e: Event) => props.onCallMethodChange((e.target as HTMLInputElement).value)}
placeholder="system-presence"
/>
@change=${(e: Event) => props.onCallMethodChange((e.target as HTMLSelectElement).value)}
>
${
!props.callMethod
? html`
<option value="" disabled>Select a method…</option>
`
: nothing
}
${props.methods.map((m) => html`<option value=${m}>${m}</option>`)}
</select>
</label>
<label class="field">
<span>Params (JSON)</span>