UNPKG

test-wuying-agentbay-sdk

Version:

TypeScript SDK for interacting with the Wuying AgentBay cloud runtime environment

1 lines 8.62 kB
{"version":3,"sources":["../src/key-normalizer.ts"],"sourcesContent":["/**\n * Key name normalization utilities for press_keys tool.\n *\n * This module provides utilities to normalize key names to the correct case format\n * expected by the press_keys MCP tool, improving case compatibility.\n */\n\n// Define key name mappings with correct case formats\n// Category 1: Modifier keys - should be Title Case\nconst MODIFIER_KEYS: Record<string, string> = {\n ctrl: \"Ctrl\",\n control: \"Ctrl\",\n alt: \"Alt\",\n shift: \"Shift\",\n win: \"Win\",\n windows: \"Win\",\n meta: \"Meta\",\n super: \"Super\",\n command: \"Command\",\n cmd: \"Command\",\n};\n\n// Category 2: Function keys - should be Title Case\nconst FUNCTION_KEYS: Record<string, string> = {\n tab: \"Tab\",\n enter: \"Enter\",\n return: \"Enter\",\n escape: \"Escape\",\n esc: \"Escape\",\n backspace: \"Backspace\",\n delete: \"Delete\",\n del: \"Delete\",\n insert: \"Insert\",\n ins: \"Insert\",\n home: \"Home\",\n end: \"End\",\n pageup: \"PageUp\",\n pagedown: \"PageDown\",\n pgup: \"PageUp\",\n pgdn: \"PageDown\",\n space: \"Space\",\n capslock: \"CapsLock\",\n numlock: \"NumLock\",\n scrolllock: \"ScrollLock\",\n printscreen: \"PrintScreen\",\n prtsc: \"PrintScreen\",\n pause: \"Pause\",\n break: \"Pause\",\n};\n\n// Category 3: Arrow keys - should be Title Case\nconst ARROW_KEYS: Record<string, string> = {\n arrowup: \"ArrowUp\",\n arrowdown: \"ArrowDown\",\n arrowleft: \"ArrowLeft\",\n arrowright: \"ArrowRight\",\n up: \"ArrowUp\",\n down: \"ArrowDown\",\n left: \"ArrowLeft\",\n right: \"ArrowRight\",\n};\n\n// Category 4: Special characters - as-is\nconst SPECIAL_CHARS: Record<string, string> = {\n minus: \"-\",\n equal: \"=\",\n leftbracket: \"[\",\n rightbracket: \"]\",\n backslash: \"\\\\\",\n semicolon: \";\",\n quote: \"'\",\n comma: \",\",\n period: \".\",\n slash: \"/\",\n backtick: \"`\",\n};\n\n// Category 5: F-keys - Title Case (F1, F2, ..., F24)\nconst F_KEYS: Record<string, string> = {};\nfor (let i = 1; i <= 24; i++) {\n const fKeyLower = `f${i}`;\n const fKeyUpper = `F${i}`;\n F_KEYS[fKeyLower] = fKeyUpper;\n}\n\n/**\n * Normalize a single key name to the correct case format.\n *\n * @param key - The key name to normalize (can be any case)\n * @returns The normalized key name with correct case\n *\n * Rules:\n * - Letter keys (a-z): Convert to lowercase\n * - Number keys (0-9): Keep as-is\n * - Modifier keys: Convert to Title Case (Ctrl, Alt, Shift, Win, etc.)\n * - Function keys: Convert to Title Case (Tab, Enter, Escape, etc.)\n * - Arrow keys: Convert to Title Case (ArrowUp, ArrowDown, etc.)\n * - F-keys: Convert to correct format (F1, F2, ..., F12)\n * - Unknown keys: Return as-is\n *\n * @example\n * ```typescript\n * normalizeSingleKey(\"A\") // returns \"a\"\n * normalizeSingleKey(\"ctrl\") // returns \"Ctrl\"\n * normalizeSingleKey(\"CTRL\") // returns \"Ctrl\"\n * normalizeSingleKey(\"TAB\") // returns \"Tab\"\n * normalizeSingleKey(\"f1\") // returns \"F1\"\n * ```\n */\nfunction normalizeSingleKey(key: string): string {\n if (!key) {\n return key;\n }\n\n // Convert to lowercase for comparison\n const keyLower = key.toLowerCase();\n\n // Check if it's a single letter (a-z)\n if (key.length === 1 && /[a-zA-Z]/.test(key)) {\n return key.toLowerCase();\n }\n\n // Check if it's a single digit (0-9)\n if (key.length === 1 && /[0-9]/.test(key)) {\n return key;\n }\n\n // Check modifier keys\n if (keyLower in MODIFIER_KEYS) {\n return MODIFIER_KEYS[keyLower];\n }\n\n // Check function keys\n if (keyLower in FUNCTION_KEYS) {\n return FUNCTION_KEYS[keyLower];\n }\n\n // Check arrow keys\n if (keyLower in ARROW_KEYS) {\n return ARROW_KEYS[keyLower];\n }\n\n // Check F-keys\n if (keyLower in F_KEYS) {\n return F_KEYS[keyLower];\n }\n\n // Check special characters\n if (keyLower in SPECIAL_CHARS) {\n return SPECIAL_CHARS[keyLower];\n }\n\n // If the key is already in a known good format (starts with uppercase letter\n // and is not all uppercase), assume it's already correct\n if (\n key[0] === key[0].toUpperCase() &&\n key !== key.toUpperCase() &&\n ![\"Control\", \"Windows\", \"Command\"].includes(key)\n ) {\n return key;\n }\n\n // Unknown key - return as-is\n return key;\n}\n\n/**\n * Normalize a list of key names to the correct case format for press_keys tool.\n *\n * This function automatically converts key names to the format expected by the\n * press_keys MCP tool, improving case compatibility and user experience.\n *\n * @param keys - Array of key names to normalize (can be any case)\n * @returns Array of normalized key names with correct case\n *\n * @example\n * ```typescript\n * normalizeKeys([\"CTRL\", \"C\"]) // returns [\"Ctrl\", \"c\"]\n * normalizeKeys([\"ctrl\", \"shift\", \"Z\"]) // returns [\"Ctrl\", \"Shift\", \"z\"]\n * normalizeKeys([\"alt\", \"TAB\"]) // returns [\"Alt\", \"Tab\"]\n * normalizeKeys([\"win\", \"d\"]) // returns [\"Win\", \"d\"]\n * ```\n *\n * Note:\n * - Modifier keys are converted to Title Case (Ctrl, Alt, Shift, Win)\n * - Function keys are converted to Title Case (Tab, Enter, Escape)\n * - Letter keys are converted to lowercase (a, b, c)\n * - Number keys remain unchanged (0, 1, 2)\n * - Unknown keys are returned as-is\n */\nexport function normalizeKeys(keys: string[]): string[] {\n if (!keys) {\n return keys;\n }\n\n const normalized: string[] = [];\n for (const key of keys) {\n if (typeof key === \"string\") {\n normalized.push(normalizeSingleKey(key));\n } else {\n // Non-string keys are passed through unchanged\n normalized.push(key);\n }\n }\n\n return normalized;\n}\n\n/**\n * Get a dictionary of all supported key name mappings.\n *\n * @returns Object with categories and their supported key names\n *\n * @example\n * ```typescript\n * const mappings = getSupportedKeyNames();\n * console.log(mappings.modifierKeys); // { ctrl: 'Ctrl', alt: 'Alt', ... }\n * ```\n */\nexport function getSupportedKeyNames(): {\n modifierKeys: Record<string, string>;\n functionKeys: Record<string, string>;\n arrowKeys: Record<string, string>;\n fKeys: Record<string, string>;\n specialChars: Record<string, string>;\n} {\n return {\n modifierKeys: MODIFIER_KEYS,\n functionKeys: FUNCTION_KEYS,\n arrowKeys: ARROW_KEYS,\n fKeys: F_KEYS,\n specialChars: SPECIAL_CHARS,\n };\n}\n"],"mappings":"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","names":[]}