mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-19 14:00:51 +00:00
* TUI/Gateway: fix pi streaming + tool routing * Tests: clarify verbose tool output expectation * fix: avoid seq gaps for targeted tool events (#8432) (thanks @gumadeiras)
87 lines
2.4 KiB
TypeScript
87 lines
2.4 KiB
TypeScript
export const GATEWAY_CLIENT_IDS = {
|
|
WEBCHAT_UI: "webchat-ui",
|
|
CONTROL_UI: "openclaw-control-ui",
|
|
WEBCHAT: "webchat",
|
|
CLI: "cli",
|
|
GATEWAY_CLIENT: "gateway-client",
|
|
MACOS_APP: "openclaw-macos",
|
|
IOS_APP: "openclaw-ios",
|
|
ANDROID_APP: "openclaw-android",
|
|
NODE_HOST: "node-host",
|
|
TEST: "test",
|
|
FINGERPRINT: "fingerprint",
|
|
PROBE: "openclaw-probe",
|
|
} as const;
|
|
|
|
export type GatewayClientId = (typeof GATEWAY_CLIENT_IDS)[keyof typeof GATEWAY_CLIENT_IDS];
|
|
|
|
// Back-compat naming (internal): these values are IDs, not display names.
|
|
export const GATEWAY_CLIENT_NAMES = GATEWAY_CLIENT_IDS;
|
|
export type GatewayClientName = GatewayClientId;
|
|
|
|
export const GATEWAY_CLIENT_MODES = {
|
|
WEBCHAT: "webchat",
|
|
CLI: "cli",
|
|
UI: "ui",
|
|
BACKEND: "backend",
|
|
NODE: "node",
|
|
PROBE: "probe",
|
|
TEST: "test",
|
|
} as const;
|
|
|
|
export type GatewayClientMode = (typeof GATEWAY_CLIENT_MODES)[keyof typeof GATEWAY_CLIENT_MODES];
|
|
|
|
export type GatewayClientInfo = {
|
|
id: GatewayClientId;
|
|
displayName?: string;
|
|
version: string;
|
|
platform: string;
|
|
deviceFamily?: string;
|
|
modelIdentifier?: string;
|
|
mode: GatewayClientMode;
|
|
instanceId?: string;
|
|
};
|
|
|
|
export const GATEWAY_CLIENT_CAPS = {
|
|
TOOL_EVENTS: "tool-events",
|
|
} as const;
|
|
|
|
export type GatewayClientCap = (typeof GATEWAY_CLIENT_CAPS)[keyof typeof GATEWAY_CLIENT_CAPS];
|
|
|
|
const GATEWAY_CLIENT_ID_SET = new Set<GatewayClientId>(Object.values(GATEWAY_CLIENT_IDS));
|
|
const GATEWAY_CLIENT_MODE_SET = new Set<GatewayClientMode>(Object.values(GATEWAY_CLIENT_MODES));
|
|
|
|
export function normalizeGatewayClientId(raw?: string | null): GatewayClientId | undefined {
|
|
const normalized = raw?.trim().toLowerCase();
|
|
if (!normalized) {
|
|
return undefined;
|
|
}
|
|
return GATEWAY_CLIENT_ID_SET.has(normalized as GatewayClientId)
|
|
? (normalized as GatewayClientId)
|
|
: undefined;
|
|
}
|
|
|
|
export function normalizeGatewayClientName(raw?: string | null): GatewayClientName | undefined {
|
|
return normalizeGatewayClientId(raw);
|
|
}
|
|
|
|
export function normalizeGatewayClientMode(raw?: string | null): GatewayClientMode | undefined {
|
|
const normalized = raw?.trim().toLowerCase();
|
|
if (!normalized) {
|
|
return undefined;
|
|
}
|
|
return GATEWAY_CLIENT_MODE_SET.has(normalized as GatewayClientMode)
|
|
? (normalized as GatewayClientMode)
|
|
: undefined;
|
|
}
|
|
|
|
export function hasGatewayClientCap(
|
|
caps: string[] | null | undefined,
|
|
cap: GatewayClientCap,
|
|
): boolean {
|
|
if (!Array.isArray(caps)) {
|
|
return false;
|
|
}
|
|
return caps.includes(cap);
|
|
}
|