mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
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:
@@ -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.
|
- 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.
|
- 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.
|
- 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
|
## 2026.3.7
|
||||||
|
|
||||||
|
|||||||
@@ -1081,6 +1081,7 @@ export function renderApp(state: AppViewState) {
|
|||||||
models: state.debugModels,
|
models: state.debugModels,
|
||||||
heartbeat: state.debugHeartbeat,
|
heartbeat: state.debugHeartbeat,
|
||||||
eventLog: state.eventLog,
|
eventLog: state.eventLog,
|
||||||
|
methods: (state.hello?.features?.methods ?? []).toSorted(),
|
||||||
callMethod: state.debugCallMethod,
|
callMethod: state.debugCallMethod,
|
||||||
callParams: state.debugCallParams,
|
callParams: state.debugCallParams,
|
||||||
callResult: state.debugCallResult,
|
callResult: state.debugCallResult,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ export type DebugProps = {
|
|||||||
models: unknown[];
|
models: unknown[];
|
||||||
heartbeat: unknown;
|
heartbeat: unknown;
|
||||||
eventLog: EventLogEntry[];
|
eventLog: EventLogEntry[];
|
||||||
|
methods: string[];
|
||||||
callMethod: string;
|
callMethod: string;
|
||||||
callParams: string;
|
callParams: string;
|
||||||
callResult: string | null;
|
callResult: string | null;
|
||||||
@@ -71,14 +72,22 @@ export function renderDebug(props: DebugProps) {
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-title">Manual RPC</div>
|
<div class="card-title">Manual RPC</div>
|
||||||
<div class="card-sub">Send a raw gateway method with JSON params.</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">
|
<label class="field">
|
||||||
<span>Method</span>
|
<span>Method</span>
|
||||||
<input
|
<select
|
||||||
.value=${props.callMethod}
|
.value=${props.callMethod}
|
||||||
@input=${(e: Event) => props.onCallMethodChange((e.target as HTMLInputElement).value)}
|
@change=${(e: Event) => props.onCallMethodChange((e.target as HTMLSelectElement).value)}
|
||||||
placeholder="system-presence"
|
>
|
||||||
/>
|
${
|
||||||
|
!props.callMethod
|
||||||
|
? html`
|
||||||
|
<option value="" disabled>Select a method…</option>
|
||||||
|
`
|
||||||
|
: nothing
|
||||||
|
}
|
||||||
|
${props.methods.map((m) => html`<option value=${m}>${m}</option>`)}
|
||||||
|
</select>
|
||||||
</label>
|
</label>
|
||||||
<label class="field">
|
<label class="field">
|
||||||
<span>Params (JSON)</span>
|
<span>Params (JSON)</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user