fix(ui): localize native Android action displays

This commit is contained in:
chenmingxuan committed 2026-11-02 22:33:40 +08:00
1 parent 4b12ae7728
commit 6a69a595ef
5 files changed
+192 -3

No files matched your search

@@ -16,6 +16,7 @@
import { ActionParam } from '../core/models/stream.model';
import { extractNumbersFromCoordinateValue, isPureDirectionString, parseSequenceCoordinates } from './image-overlay.util';
import { formatNativeActionParam, getNativeActionArgs, getNativeActionTitle } from './native-action-labels.util';
// Tool objects are replaced (not mutated) when a trace is updated, so a
// WeakMap keyed on the tool is a safe memo for the parsed-args lookup that
@@ -553,6 +554,8 @@ export function getToolDisplayLabel(tool: any, isFirstSaveNote: boolean = false)
const cleanName = tool.name.replace(/^(_)?exec_/, '');
const nameLower = cleanName.toLowerCase();
const args = getToolArgs(tool);
const nativeTitle = getNativeActionTitle(tool.name, args);
if (nativeTitle) return nativeTitle;
switch (nameLower) {
case 'manage_app':
@@ -899,6 +902,8 @@ export function getToolIcon(tool: any): string {
*/
export function getToolTitle(tool: any): string {
if (!tool || !tool.name) return "工具调用";
const nativeTitle = getNativeActionTitle(tool.name, getToolArgs(tool));
if (nativeTitle) return nativeTitle;
const cleanName = tool.name.replace(/^(_)?exec_/, '');
const name = cleanName.toLowerCase();
switch (name) {
@@ -1191,6 +1196,9 @@ export function getAdbTerminalId(tool: any): string {
*/
export function getToolGenericDetails(tool: any): string {
if (!tool) return '';
if (getNativeActionTitle(tool.name || '', getToolArgs(tool))) {
return extractToolExtraParams(tool).map(param => `${param.key}:${param.value}`).join(',');
}
if (isAdbCommandTool(tool)) {
return '';
}
@@ -1235,7 +1243,9 @@ export function getToolErrorMessage(tool: any): string {
*/
export function extractToolExtraParams(toolData: any, cache?: WeakMap<any, ActionParam[]>): ActionParam[] {
if (!toolData) return [];
const payload = toolData.payload || toolData.args || toolData;
const nativeArgs = getNativeActionArgs(getToolArgs(toolData));
const native = getNativeActionTitle(toolData.name || '', nativeArgs) !== null;
const payload = native ? nativeArgs : (toolData.payload || toolData.args || toolData);
if (!payload || typeof payload !== 'object') return [];
if (cache && cache.has(payload)) {
return cache.get(payload)!;
@@ -1272,11 +1282,16 @@ export function extractToolExtraParams(toolData: any, cache?: WeakMap<any, Actio
}
const mergedObj = { ...toolData, ...(typeof payload === 'object' ? payload : {}), ...parsedArgs };
if (native) Object.assign(mergedObj, nativeArgs);
for (const [k, v] of Object.entries(mergedObj)) {
const lowerK = k.toLowerCase();
if (standardKeys.has(lowerK)) continue;
if (standardKeys.has(lowerK) && !(native && lowerK === 'target')) continue;
if (v === null || v === undefined || v === '') continue;
if (native) {
result.push(formatNativeActionParam(k, v));
continue;
}
let valStr = String(v);
if (valStr.includes('object at 0x') || valStr.startsWith('<artemis.') || valStr.includes('<controller') || valStr.includes('<android_world')) continue;