mcp-baepsae 6.2.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-KR.md +4 -4
- package/README.md +4 -4
- package/bundled/baepsae-native +0 -0
- package/dist/tool-manifest.d.ts.map +1 -1
- package/dist/tool-manifest.js +12 -0
- package/dist/tool-manifest.js.map +1 -1
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +18 -4
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/system.d.ts.map +1 -1
- package/dist/tools/system.js +52 -0
- package/dist/tools/system.js.map +1 -1
- package/dist/tools/ui.d.ts.map +1 -1
- package/dist/tools/ui.js +125 -6
- package/dist/tools/ui.js.map +1 -1
- package/dist/utils.d.ts +9 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +57 -2
- package/dist/utils.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/native/Sources/Commands/InputCommands.swift +1 -1
- package/native/Sources/Commands/InputSourceCommands.swift +80 -0
- package/native/Sources/Commands/SystemCommands.swift +371 -23
- package/native/Sources/Commands/UICommands.swift +428 -7
- package/native/Sources/Utils.swift +78 -17
- package/native/Sources/Version.swift +1 -1
- package/native/Sources/main.swift +44 -0
- package/package.json +1 -1
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.unifiedTargetSchema = exports.keycodeSchema = exports.BAEPSAE_SUBCOMMANDS = exports.GESTURE_PRESETS = exports.BUTTON_TYPES = exports.NATIVE_BINARY_NAME = exports.NATIVE_BINARY_ENV = exports.DEFAULT_TIMEOUT_MS = exports.SERVER_VERSION = exports.SERVER_NAME = exports.PACKAGE_ROOT = void 0;
|
|
3
|
+
exports.unifiedTargetSchema = exports.KEY_NAME_MAP = exports.keycodeSchema = exports.BAEPSAE_SUBCOMMANDS = exports.GESTURE_PRESETS = exports.BUTTON_TYPES = exports.NATIVE_BINARY_NAME = exports.NATIVE_BINARY_ENV = exports.DEFAULT_TIMEOUT_MS = exports.SERVER_VERSION = exports.SERVER_NAME = exports.PACKAGE_ROOT = void 0;
|
|
4
|
+
exports.resolveKeycode = resolveKeycode;
|
|
4
5
|
exports.makeToolError = makeToolError;
|
|
5
6
|
exports.isExecutable = isExecutable;
|
|
6
7
|
exports.resolveNativeBinary = resolveNativeBinary;
|
|
@@ -65,7 +66,61 @@ exports.BAEPSAE_SUBCOMMANDS = [
|
|
|
65
66
|
"get-focused-app",
|
|
66
67
|
"clipboard",
|
|
67
68
|
];
|
|
68
|
-
exports.keycodeSchema = zod_1.z.
|
|
69
|
+
exports.keycodeSchema = zod_1.z.union([
|
|
70
|
+
zod_1.z.number().int().min(0).max(255),
|
|
71
|
+
zod_1.z.string().min(1),
|
|
72
|
+
]).describe("HID keycode (0-255) or key name (e.g. 'command', 'shift', 'a', 'f1')");
|
|
73
|
+
// 키 이름 → HID keycode 매핑 테이블 (QWERTY 레이아웃 기준)
|
|
74
|
+
exports.KEY_NAME_MAP = {
|
|
75
|
+
// Modifier keys
|
|
76
|
+
command: 55, cmd: 55, leftcommand: 55,
|
|
77
|
+
rightcommand: 54, rcmd: 54,
|
|
78
|
+
shift: 56, leftshift: 56,
|
|
79
|
+
rightshift: 60, rshift: 60,
|
|
80
|
+
option: 58, alt: 58, leftoption: 58,
|
|
81
|
+
rightoption: 61, ralt: 61, roption: 61,
|
|
82
|
+
control: 59, ctrl: 59, leftcontrol: 59,
|
|
83
|
+
rightcontrol: 62, rctrl: 62,
|
|
84
|
+
capslock: 57, fn: 63,
|
|
85
|
+
// Special keys
|
|
86
|
+
return: 36, enter: 36,
|
|
87
|
+
tab: 48, space: 49,
|
|
88
|
+
delete: 51, backspace: 51,
|
|
89
|
+
forwarddelete: 117,
|
|
90
|
+
escape: 53, esc: 53,
|
|
91
|
+
// Arrow keys
|
|
92
|
+
up: 126, down: 125, left: 123, right: 124,
|
|
93
|
+
// Navigation keys
|
|
94
|
+
home: 115, end: 119, pageup: 116, pagedown: 121,
|
|
95
|
+
// Letters (QWERTY layout)
|
|
96
|
+
a: 0, s: 1, d: 2, f: 3, h: 4, g: 5, z: 6, x: 7, c: 8, v: 9,
|
|
97
|
+
b: 11, q: 12, w: 13, e: 14, r: 15, y: 16, t: 17, o: 31, u: 32,
|
|
98
|
+
i: 34, p: 35, l: 37, j: 38, k: 40, n: 45, m: 46,
|
|
99
|
+
// Number keys
|
|
100
|
+
"0": 29, "1": 18, "2": 19, "3": 20, "4": 21, "5": 23, "6": 22, "7": 26, "8": 28, "9": 25,
|
|
101
|
+
// Function keys
|
|
102
|
+
f1: 122, f2: 120, f3: 99, f4: 118, f5: 96, f6: 97,
|
|
103
|
+
f7: 98, f8: 100, f9: 101, f10: 109, f11: 103, f12: 111,
|
|
104
|
+
// Punctuation keys
|
|
105
|
+
minus: 27, equal: 24, leftbracket: 33, rightbracket: 30,
|
|
106
|
+
semicolon: 41, quote: 39, comma: 43, period: 47, slash: 44, backslash: 42,
|
|
107
|
+
grave: 50, // backtick
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* 키 이름(문자열) 또는 숫자 keycode를 HID keycode 숫자로 변환합니다.
|
|
111
|
+
* - 숫자인 경우 그대로 반환
|
|
112
|
+
* - 문자열인 경우 KEY_NAME_MAP에서 조회, 없으면 에러 발생
|
|
113
|
+
*/
|
|
114
|
+
function resolveKeycode(value) {
|
|
115
|
+
if (typeof value === "number")
|
|
116
|
+
return value;
|
|
117
|
+
const lower = value.toLowerCase().replace(/[\s_-]/g, "");
|
|
118
|
+
const code = exports.KEY_NAME_MAP[lower];
|
|
119
|
+
if (code === undefined) {
|
|
120
|
+
throw new Error(`Unknown key name: '${value}'. Use a numeric keycode (0-255) or a known name.`);
|
|
121
|
+
}
|
|
122
|
+
return code;
|
|
123
|
+
}
|
|
69
124
|
function makeToolError(params) {
|
|
70
125
|
return {
|
|
71
126
|
code: params.code,
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AA4DA,sCAkBC;AAED,oCAOC;AAED,kDAyDC;AAQD,4DA2BC;AAGD,gCAIC;AAED,4BAMC;AAED,4CAIC;AAED,wCA4FC;AAMD,oCAsDC;AAuED,8BAEC;AAED,8BAgCC;AAED,gEAMC;AAvdD,2DAAyD;AACzD,qCAA+E;AAC/E,+CAAyC;AACzC,yCAAuD;AACvD,6BAAwB;AAGxB,6CAA6D;AAEhD,QAAA,YAAY,GAAG,IAAA,mBAAO,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,QAAA,WAAW,GAAG,yBAAY,CAAC;AAC3B,QAAA,cAAc,GAAG,4BAAe,CAAC;AAEjC,QAAA,kBAAkB,GAAG,MAAM,CAAC;AAC5B,QAAA,iBAAiB,GAAG,qBAAqB,CAAC;AAC1C,QAAA,kBAAkB,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAE5F,QAAA,YAAY,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAU,CAAC;AAC7E,QAAA,eAAe,GAAG;IAC7B,WAAW;IACX,aAAa;IACb,aAAa;IACb,cAAc;IACd,sBAAsB;IACtB,uBAAuB;IACvB,qBAAqB;IACrB,wBAAwB;CAChB,CAAC;AACE,QAAA,mBAAmB,GAAG;IACjC,aAAa;IACb,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,QAAQ;IACR,KAAK;IACL,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;IACL,cAAc;IACd,WAAW;IACX,OAAO;IACP,SAAS;IACT,cAAc;IACd,cAAc;IACd,YAAY;IACZ,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,QAAQ;IACR,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,WAAW;CACH,CAAC;AAEE,QAAA,aAAa,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9D,SAAgB,aAAa,CAAC,MAQ7B;IACC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;QACpC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;QAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,IAAA,oBAAU,EAAC,QAAQ,EAAE,mBAAS,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAiB,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,yBAAiB,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0CAA0C;IAC1C,mEAAmE;IACnE,uCAAuC;IACvC,wCAAwC;IACxC,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC/B,CAAC,CAAC,CAAC,IAAA,mBAAO,EAAC,oBAAY,EAAE,SAAS,EAAE,0BAAkB,CAAC,CAAC;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,IAAA,mBAAO,EAAC,oBAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAAkB,CAAC;QACxE,IAAA,mBAAO,EAAC,oBAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,0BAAkB,CAAC;KACvE,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,QAAQ,GAAa,CAAC,0BAA0B,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CACX,oDAAoD,OAAO,CAAC,QAAQ,GAAG,CACxE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,wCAAwC;QACxC,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC;YACH,IAAA,iCAAY,EAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1D,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CACX,0HAA0H,CAC3H,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CACX,+CAA+C,yBAAiB,GAAG,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAEY,QAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACrF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC1F,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CACrF,CAAC;AAEF,SAAgB,wBAAwB,CAAC,MAA8D;IACrG,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACpF,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2FAA2F,EAAE,CAAC;YAC9H,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,2FAA2F;aACrG,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kGAAkG,EAAE,CAAC;YACrI,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,kGAAkG;aAC5G,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7D,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,OAAQ,CAAC,CAAC;AACzC,CAAC;AAGD,SAAgB,UAAU,CAAC,IAAc,EAAE,IAAY,EAAE,KAAkC;IACzF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC;AAClD,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,MAAM,QAAQ,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,IAAA,gBAAK,EAAC,IAAA,mBAAO,EAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,IAAc,EACd,UAAmC,EAAE;IAErC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,0BAAkB,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IAEvE,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvG,OAAO,MAAM,IAAI,OAAO,CAAyB,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACjF,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,UAAU,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;SACpE,CAAC,CAAC;QAEH,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,eAA2C,CAAC;QAChD,IAAI,cAAyC,CAAC;QAE9C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,IAAA,2BAAiB,EAAC,UAAU,CAAC,CAAC;YACnD,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE;gBACjE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;gBACjD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;gBACjD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YACjD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,aAAa,CAAC,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAElB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YAED,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAErB,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,GAAG,IAAI,CAAC;YACd,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,eAAe,EAAE,CAAC;gBACpB,YAAY,CAAC,eAAe,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,cAAc,CAAC;gBACvB,CAAC;gBAED,cAAc,CAAC;oBACb,cAAc,EAAE,UAAU;oBAC1B,IAAI;oBACJ,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;oBACnF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;oBAC9D,QAAQ;oBACR,MAAM;oBACN,QAAQ;oBACR,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACnC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,cAAsB,EAAE,IAAc;IAC7D,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,SAAgB,YAAY,CAAC,MAA8B,EAAE,UAA2B,EAAE;IACxF,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,KAAK,CAAC;IAC7D,MAAM,qBAAqB,GACzB,iBAAiB,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACtG,MAAM,OAAO,GACX,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;QACnD,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC;QACvC,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAErD,MAAM,KAAK,GAAa;QACtB,eAAe,MAAM,CAAC,cAAc,EAAE;QACtC,YAAY,eAAe,CAAC,IAAA,oBAAQ,EAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QAC3E,cAAc,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QAC3E,aAAa,MAAM,CAAC,UAAU,IAAI;KACnC,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,cAAc,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7G,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,eAAe,GAAG,OAAO;QAC7B,CAAC,CAAC,aAAa,CAAC;YACZ,IAAI,EAAE,qBAAqB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B;YACrI,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YACnD,OAAO,EAAE,mBAAmB,IAAI,MAAM,CAAC,MAAM,IAAI,iBAAiB;YAClE,SAAS,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,qBAAqB,CAAC;YAChF,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ;SACnC,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO;QACP,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,UAAkB,EAClB,IAAc,EACd,OAAiC,EACjC,eAAiC;IAEjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC;QAChC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,OAAO,EAAE,EAAE,CAAC;YACrG,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,WAAW;gBACrB,OAAO;gBACP,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,SAAS;aAClB,CAAC;SACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAQlE,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC7E,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ;YAClC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAc;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,OAAiC,EAAE,eAAiC;IAClH,OAAO,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3G,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,IAAc,EACd,OAAiC,EACjC,eAAiC;IAEjC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzF,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mCAAmC;gBACzC,QAAQ,EAAE,aAAa;gBACvB,OAAO;gBACP,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,SAAS;aAClB,CAAC;SACH,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjG,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACvG,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,0BAA0B;IACxC,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PACKAGE_VERSION = exports.PACKAGE_NAME = void 0;
|
|
4
4
|
exports.PACKAGE_NAME = "mcp-baepsae";
|
|
5
|
-
exports.PACKAGE_VERSION = "6.
|
|
5
|
+
exports.PACKAGE_VERSION = "6.3.0";
|
|
6
6
|
//# sourceMappingURL=version.js.map
|
|
@@ -22,7 +22,7 @@ func handleKeySequence(_ parsed: ParsedOptions) throws -> Int32 {
|
|
|
22
22
|
throw NativeError.invalidArguments("key-sequence requires --keycodes.")
|
|
23
23
|
}
|
|
24
24
|
let keycodes = try parseCommaSeparatedInts(raw, label: "keycodes")
|
|
25
|
-
let delay = try optionalDoubleOption("--delay", from: parsed) ?? 0
|
|
25
|
+
let delay = try optionalDoubleOption("--delay", from: parsed) ?? 0.05
|
|
26
26
|
for keyCode in keycodes {
|
|
27
27
|
sendKeyPress(keyCode: keyCode, duration: nil)
|
|
28
28
|
if delay > 0 {
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import AppKit
|
|
2
|
+
import Carbon
|
|
3
|
+
import Foundation
|
|
4
|
+
|
|
5
|
+
private func getInputSourceProperty(_ source: TISInputSource, _ key: CFString) -> AnyObject? {
|
|
6
|
+
guard let cfType = TISGetInputSourceProperty(source, key) else { return nil }
|
|
7
|
+
return Unmanaged<AnyObject>.fromOpaque(cfType).takeUnretainedValue()
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
private func isCJKV(_ source: TISInputSource) -> Bool {
|
|
11
|
+
guard let languages = getInputSourceProperty(source, kTISPropertyInputSourceLanguages) as? [String],
|
|
12
|
+
let lang = languages.first else { return false }
|
|
13
|
+
return ["ko", "ja", "zh", "vi"].contains(lang)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
private func selectableKeyboardSources() -> [TISInputSource] {
|
|
17
|
+
let sourceList = TISCreateInputSourceList(nil, false)
|
|
18
|
+
.takeRetainedValue() as NSArray as! [TISInputSource]
|
|
19
|
+
return sourceList.filter {
|
|
20
|
+
let category = getInputSourceProperty($0, kTISPropertyInputSourceCategory) as? String
|
|
21
|
+
let isSelectable = getInputSourceProperty($0, kTISPropertyInputSourceIsSelectCapable) as? Bool
|
|
22
|
+
return category == (kTISCategoryKeyboardInputSource as String) && isSelectable == true
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
func handleListInputSources(_ parsed: ParsedOptions) throws -> Int32 {
|
|
27
|
+
let sources = selectableKeyboardSources()
|
|
28
|
+
for source in sources {
|
|
29
|
+
let id = getInputSourceProperty(source, kTISPropertyInputSourceID) as? String ?? ""
|
|
30
|
+
let name = getInputSourceProperty(source, kTISPropertyLocalizedName) as? String ?? ""
|
|
31
|
+
let isSelected = (getInputSourceProperty(source, kTISPropertyInputSourceIsSelected) as? Bool) == true
|
|
32
|
+
print("\(id) | \(name) | \(isSelected ? "active" : "")")
|
|
33
|
+
}
|
|
34
|
+
return 0
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
func handleInputSource(_ parsed: ParsedOptions) throws -> Int32 {
|
|
38
|
+
// No arguments: query current input source
|
|
39
|
+
guard let targetId = parsed.positionals.first else {
|
|
40
|
+
let current = TISCopyCurrentKeyboardInputSource().takeRetainedValue()
|
|
41
|
+
let id = getInputSourceProperty(current, kTISPropertyInputSourceID) as? String ?? ""
|
|
42
|
+
let name = getInputSourceProperty(current, kTISPropertyLocalizedName) as? String ?? ""
|
|
43
|
+
print("\(id) | \(name)")
|
|
44
|
+
return 0
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Find target source
|
|
48
|
+
let sources = selectableKeyboardSources()
|
|
49
|
+
guard let target = sources.first(where: {
|
|
50
|
+
(getInputSourceProperty($0, kTISPropertyInputSourceID) as? String) == targetId
|
|
51
|
+
}) else {
|
|
52
|
+
let available = sources.compactMap { getInputSourceProperty($0, kTISPropertyInputSourceID) as? String }
|
|
53
|
+
throw NativeError.commandFailed("Input source not found: \(targetId). Available: \(available.joined(separator: ", "))")
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// CJKV workaround: double-switch via ABC/US first
|
|
57
|
+
if isCJKV(target) {
|
|
58
|
+
if let abc = sources.first(where: {
|
|
59
|
+
let id = getInputSourceProperty($0, kTISPropertyInputSourceID) as? String ?? ""
|
|
60
|
+
return id.contains("ABC") || id.contains(".US")
|
|
61
|
+
}) {
|
|
62
|
+
TISSelectInputSource(abc)
|
|
63
|
+
usleep(100_000) // 100ms
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
TISSelectInputSource(target)
|
|
68
|
+
usleep(100_000)
|
|
69
|
+
|
|
70
|
+
// Verify switch
|
|
71
|
+
let current = TISCopyCurrentKeyboardInputSource().takeRetainedValue()
|
|
72
|
+
let currentId = getInputSourceProperty(current, kTISPropertyInputSourceID) as? String ?? ""
|
|
73
|
+
if currentId == targetId {
|
|
74
|
+
print("Switched to: \(targetId)")
|
|
75
|
+
} else {
|
|
76
|
+
fputs("Warning: requested \(targetId) but current is \(currentId)\n", stderr)
|
|
77
|
+
print("Switched to: \(currentId) (requested: \(targetId))")
|
|
78
|
+
}
|
|
79
|
+
return 0
|
|
80
|
+
}
|
|
@@ -162,7 +162,6 @@ func handleMenuAction(_ parsed: ParsedOptions) throws -> Int32 {
|
|
|
162
162
|
}
|
|
163
163
|
try ensureAccessibilityTrusted()
|
|
164
164
|
try activateTarget(target)
|
|
165
|
-
Thread.sleep(forTimeInterval: 0.3)
|
|
166
165
|
let menuName = try requiredOption("--menu", from: parsed)
|
|
167
166
|
let itemName = try requiredOption("--item", from: parsed)
|
|
168
167
|
guard case .macApp(let pid, _, _) = target else {
|
|
@@ -185,33 +184,80 @@ func handleMenuAction(_ parsed: ParsedOptions) throws -> Int32 {
|
|
|
185
184
|
let availableMenus = menuBarItems.compactMap { StringAttribute($0, kAXTitleAttribute as CFString) }
|
|
186
185
|
throw NativeError.commandFailed("Menu '\(menuName)' not found. Available menus: \(availableMenus.joined(separator: ", "))")
|
|
187
186
|
}
|
|
188
|
-
//
|
|
187
|
+
// Parse item path for submenu navigation (e.g. "New > File..." uses > separator)
|
|
188
|
+
let itemPath = itemName.split(separator: ">").map {
|
|
189
|
+
$0.trimmingCharacters(in: .whitespaces)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Open the top-level menu
|
|
189
193
|
AXUIElementPerformAction(menuItem, kAXPressAction as CFString)
|
|
190
194
|
Thread.sleep(forTimeInterval: 0.2)
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
let
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
195
|
+
|
|
196
|
+
var currentMenu = menuItem
|
|
197
|
+
for (depth, pathComponent) in itemPath.enumerated() {
|
|
198
|
+
let isLast = depth == itemPath.count - 1
|
|
199
|
+
let menuChildren = Children(currentMenu)
|
|
200
|
+
var foundItem: UIElement? = nil
|
|
201
|
+
|
|
202
|
+
for child in menuChildren {
|
|
203
|
+
let items = Children(child)
|
|
204
|
+
for item in items {
|
|
205
|
+
if let title = StringAttribute(item, kAXTitleAttribute as CFString),
|
|
206
|
+
normalizeText(title) == normalizeText(pathComponent) {
|
|
207
|
+
foundItem = item
|
|
208
|
+
break
|
|
209
|
+
}
|
|
201
210
|
}
|
|
211
|
+
if foundItem != nil { break }
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
guard let targetItem = foundItem else {
|
|
215
|
+
AXUIElementPerformAction(menuItem, "AXCancel" as CFString)
|
|
216
|
+
throw NativeError.commandFailed("Menu item '\(pathComponent)' not found at depth \(depth + 1) in '\(menuName)'.")
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if isLast {
|
|
220
|
+
let pressStatus = AXUIElementPerformAction(targetItem, kAXPressAction as CFString)
|
|
221
|
+
if pressStatus != .success {
|
|
222
|
+
throw NativeError.commandFailed("Failed to activate menu item '\(pathComponent)' (status: \(pressStatus.rawValue)).")
|
|
223
|
+
}
|
|
224
|
+
} else {
|
|
225
|
+
// 서브메뉴 열기: AXShowMenu 우선 시도, 실패 시 CGEvent 마우스 hover로 폴백
|
|
226
|
+
let showMenuResult = AXUIElementPerformAction(targetItem, "AXShowMenu" as CFString)
|
|
227
|
+
if showMenuResult != .success {
|
|
228
|
+
// Fallback: hover via mouse move to element center
|
|
229
|
+
if let frame = FrameAttribute(targetItem) {
|
|
230
|
+
let center = CGPoint(x: frame.midX, y: frame.midY)
|
|
231
|
+
let source = CGEventSource(stateID: .hidSystemState)
|
|
232
|
+
let moveEvent = CGEvent(
|
|
233
|
+
mouseEventSource: source,
|
|
234
|
+
mouseType: .mouseMoved,
|
|
235
|
+
mouseCursorPosition: center,
|
|
236
|
+
mouseButton: .left
|
|
237
|
+
)
|
|
238
|
+
moveEvent?.post(tap: .cghidEventTap)
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// 서브메뉴 출현 대기 (최대 500ms polling, Children 체크)
|
|
242
|
+
var submenuAppeared = false
|
|
243
|
+
for _ in 0..<10 {
|
|
244
|
+
Thread.sleep(forTimeInterval: 0.05)
|
|
245
|
+
let children = Children(targetItem)
|
|
246
|
+
if !children.isEmpty {
|
|
247
|
+
submenuAppeared = true
|
|
248
|
+
break
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if !submenuAppeared {
|
|
252
|
+
AXUIElementPerformAction(menuItem, "AXCancel" as CFString)
|
|
253
|
+
throw NativeError.commandFailed("Submenu did not appear for '\(pathComponent)' at depth \(depth + 1) in '\(menuName)'.")
|
|
254
|
+
}
|
|
255
|
+
currentMenu = targetItem
|
|
202
256
|
}
|
|
203
|
-
if foundItem != nil { break }
|
|
204
|
-
}
|
|
205
|
-
guard let targetItem = foundItem else {
|
|
206
|
-
// Cancel the menu
|
|
207
|
-
AXUIElementPerformAction(menuItem, "AXCancel" as CFString)
|
|
208
|
-
throw NativeError.commandFailed("Menu item '\(itemName)' not found in '\(menuName)'.")
|
|
209
|
-
}
|
|
210
|
-
let pressStatus = AXUIElementPerformAction(targetItem, kAXPressAction as CFString)
|
|
211
|
-
if pressStatus != .success {
|
|
212
|
-
throw NativeError.commandFailed("Failed to activate menu item '\(itemName)' (status: \(pressStatus.rawValue)).")
|
|
213
257
|
}
|
|
214
|
-
|
|
258
|
+
|
|
259
|
+
let fullPath = itemPath.joined(separator: " > ")
|
|
260
|
+
print("Performed: \(menuName) > \(fullPath)")
|
|
215
261
|
return 0
|
|
216
262
|
}
|
|
217
263
|
|
|
@@ -244,3 +290,305 @@ func handleClipboard(_ parsed: ParsedOptions) throws -> Int32 {
|
|
|
244
290
|
}
|
|
245
291
|
return 0
|
|
246
292
|
}
|
|
293
|
+
|
|
294
|
+
func handleFocusWindow(_ parsed: ParsedOptions) throws -> Int32 {
|
|
295
|
+
let target = try resolveTarget(from: parsed)
|
|
296
|
+
if case .simulator = target {
|
|
297
|
+
throw NativeError.commandFailed("focus-window is only supported for macOS apps.")
|
|
298
|
+
}
|
|
299
|
+
try ensureAccessibilityTrusted()
|
|
300
|
+
try activateTarget(target)
|
|
301
|
+
let appRoot = try accessibilityRootElement(for: target)
|
|
302
|
+
let windows = Children(appRoot)
|
|
303
|
+
|
|
304
|
+
let selected: UIElement
|
|
305
|
+
if let indexStr = parsed.options["--index"], let idx = Int(indexStr) {
|
|
306
|
+
guard idx < windows.count else {
|
|
307
|
+
throw NativeError.invalidArguments("Window index \(idx) out of range (0..\(windows.count - 1)).")
|
|
308
|
+
}
|
|
309
|
+
selected = windows[idx]
|
|
310
|
+
} else if let title = parsed.options["--title"] {
|
|
311
|
+
guard let found = windows.first(where: {
|
|
312
|
+
(StringAttribute($0, kAXTitleAttribute as CFString) ?? "")
|
|
313
|
+
.localizedCaseInsensitiveContains(title)
|
|
314
|
+
}) else {
|
|
315
|
+
let available = windows.compactMap { StringAttribute($0, kAXTitleAttribute as CFString) }
|
|
316
|
+
throw NativeError.commandFailed("No window matching '\(title)'. Available: \(available.joined(separator: ", "))")
|
|
317
|
+
}
|
|
318
|
+
selected = found
|
|
319
|
+
} else {
|
|
320
|
+
throw NativeError.invalidArguments("focus-window requires --index or --title.")
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
AXUIElementPerformAction(selected, kAXRaiseAction as CFString)
|
|
324
|
+
let windowTitle = StringAttribute(selected, kAXTitleAttribute as CFString) ?? "(untitled)"
|
|
325
|
+
print("Focused window: \(windowTitle)")
|
|
326
|
+
return 0
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
func handleContextMenuAction(_ parsed: ParsedOptions) throws -> Int32 {
|
|
330
|
+
let target = try resolveTarget(from: parsed)
|
|
331
|
+
if case .simulator = target {
|
|
332
|
+
throw NativeError.commandFailed("context-menu-action is only supported for macOS apps.")
|
|
333
|
+
}
|
|
334
|
+
try ensureAccessibilityTrusted()
|
|
335
|
+
let itemName = try requiredOption("--item", from: parsed)
|
|
336
|
+
|
|
337
|
+
let appRoot = try accessibilityRootElement(for: target)
|
|
338
|
+
|
|
339
|
+
// AXMenu role을 가진 컨텍스트 메뉴 탐색 (최대 1초 polling)
|
|
340
|
+
var contextMenu: UIElement? = nil
|
|
341
|
+
for _ in 0..<20 {
|
|
342
|
+
let children = Children(appRoot)
|
|
343
|
+
for child in children {
|
|
344
|
+
let role = StringAttribute(child, kAXRoleAttribute as CFString)
|
|
345
|
+
if role == "AXMenu" {
|
|
346
|
+
contextMenu = child
|
|
347
|
+
break
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if contextMenu != nil { break }
|
|
351
|
+
Thread.sleep(forTimeInterval: 0.05)
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
guard let menu = contextMenu else {
|
|
355
|
+
throw NativeError.commandFailed("No context menu found. Ensure a right-click menu is open before calling context-menu-action.")
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// '>' 구분자로 서브메뉴 경로 파싱
|
|
359
|
+
let itemPath = itemName.split(separator: ">").map {
|
|
360
|
+
$0.trimmingCharacters(in: .whitespaces)
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
var currentMenu = menu
|
|
364
|
+
for (depth, pathComponent) in itemPath.enumerated() {
|
|
365
|
+
let isLast = depth == itemPath.count - 1
|
|
366
|
+
let items = Children(currentMenu)
|
|
367
|
+
var foundItem: UIElement? = nil
|
|
368
|
+
|
|
369
|
+
for item in items {
|
|
370
|
+
if let title = StringAttribute(item, kAXTitleAttribute as CFString),
|
|
371
|
+
normalizeText(title) == normalizeText(pathComponent) {
|
|
372
|
+
foundItem = item
|
|
373
|
+
break
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
guard let targetItem = foundItem else {
|
|
378
|
+
AXUIElementPerformAction(menu, "AXCancel" as CFString)
|
|
379
|
+
throw NativeError.commandFailed("Context menu item '\(pathComponent)' not found at depth \(depth + 1).")
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
if isLast {
|
|
383
|
+
let pressStatus = AXUIElementPerformAction(targetItem, kAXPressAction as CFString)
|
|
384
|
+
if pressStatus != .success {
|
|
385
|
+
throw NativeError.commandFailed("Failed to activate context menu item '\(pathComponent)' (status: \(pressStatus.rawValue)).")
|
|
386
|
+
}
|
|
387
|
+
} else {
|
|
388
|
+
// 서브메뉴 열기: AXShowMenu 우선 시도, 실패 시 CGEvent 마우스 hover 폴백
|
|
389
|
+
let showResult = AXUIElementPerformAction(targetItem, "AXShowMenu" as CFString)
|
|
390
|
+
if showResult != .success {
|
|
391
|
+
if let frame = FrameAttribute(targetItem) {
|
|
392
|
+
let center = CGPoint(x: frame.midX, y: frame.midY)
|
|
393
|
+
let source = CGEventSource(stateID: .hidSystemState)
|
|
394
|
+
let moveEvent = CGEvent(
|
|
395
|
+
mouseEventSource: source,
|
|
396
|
+
mouseType: .mouseMoved,
|
|
397
|
+
mouseCursorPosition: center,
|
|
398
|
+
mouseButton: .left
|
|
399
|
+
)
|
|
400
|
+
moveEvent?.post(tap: .cghidEventTap)
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// 서브메뉴 출현 대기 (최대 500ms polling)
|
|
404
|
+
var submenuAppeared = false
|
|
405
|
+
for _ in 0..<10 {
|
|
406
|
+
Thread.sleep(forTimeInterval: 0.05)
|
|
407
|
+
let subChildren = Children(targetItem)
|
|
408
|
+
if !subChildren.isEmpty {
|
|
409
|
+
submenuAppeared = true
|
|
410
|
+
break
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
if !submenuAppeared {
|
|
414
|
+
AXUIElementPerformAction(menu, "AXCancel" as CFString)
|
|
415
|
+
throw NativeError.commandFailed("Submenu did not appear for '\(pathComponent)'.")
|
|
416
|
+
}
|
|
417
|
+
currentMenu = targetItem
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
let fullPath = itemPath.joined(separator: " > ")
|
|
422
|
+
print("Context menu action: \(fullPath)")
|
|
423
|
+
return 0
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
func handleWatchNotification(_ parsed: ParsedOptions) throws -> Int32 {
|
|
427
|
+
let target = try resolveTarget(from: parsed)
|
|
428
|
+
guard case .macApp(let pid, _, _) = target else {
|
|
429
|
+
throw NativeError.commandFailed("watch-notification is only supported for macOS apps.")
|
|
430
|
+
}
|
|
431
|
+
try ensureAccessibilityTrusted()
|
|
432
|
+
|
|
433
|
+
let timeout = try optionalDoubleOption("--timeout", from: parsed) ?? 10.0
|
|
434
|
+
|
|
435
|
+
// 감시할 알림 목록 결정 (--preset 또는 --notifications)
|
|
436
|
+
let notifications: [String]
|
|
437
|
+
if let preset = parsed.options["--preset"] {
|
|
438
|
+
switch preset {
|
|
439
|
+
case "window":
|
|
440
|
+
notifications = [
|
|
441
|
+
"AXWindowCreated",
|
|
442
|
+
"AXSheetCreated",
|
|
443
|
+
"AXDrawerCreated",
|
|
444
|
+
"AXUIElementDestroyed",
|
|
445
|
+
]
|
|
446
|
+
case "text":
|
|
447
|
+
notifications = [
|
|
448
|
+
"AXValueChanged",
|
|
449
|
+
"AXSelectedTextChanged",
|
|
450
|
+
"AXSelectedChildrenChanged",
|
|
451
|
+
]
|
|
452
|
+
case "focus":
|
|
453
|
+
notifications = [
|
|
454
|
+
"AXApplicationActivated",
|
|
455
|
+
"AXApplicationDeactivated",
|
|
456
|
+
"AXFocusedWindowChanged",
|
|
457
|
+
"AXFocusedUIElementChanged",
|
|
458
|
+
"AXMainWindowChanged",
|
|
459
|
+
]
|
|
460
|
+
case "menu":
|
|
461
|
+
notifications = [
|
|
462
|
+
"AXMenuOpened",
|
|
463
|
+
"AXMenuClosed",
|
|
464
|
+
"AXMenuItemSelected",
|
|
465
|
+
]
|
|
466
|
+
default:
|
|
467
|
+
throw NativeError.invalidArguments("Unknown preset: \(preset). Use: window, text, focus, menu.")
|
|
468
|
+
}
|
|
469
|
+
} else if let raw = parsed.options["--notifications"] {
|
|
470
|
+
notifications = raw.split(separator: ",").map { $0.trimmingCharacters(in: .whitespaces) }
|
|
471
|
+
} else {
|
|
472
|
+
throw NativeError.invalidArguments("watch-notification requires --preset or --notifications.")
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// 콜백에서 공유할 상태 (클래스로 참조 타입 사용)
|
|
476
|
+
class NotificationState {
|
|
477
|
+
var received: String?
|
|
478
|
+
var elementInfo: String?
|
|
479
|
+
}
|
|
480
|
+
let state = NotificationState()
|
|
481
|
+
|
|
482
|
+
// AXObserver 콜백: 알림 수신 시 상태 기록 후 RunLoop 중단
|
|
483
|
+
let callback: AXObserverCallback = { _, element, notification, refcon in
|
|
484
|
+
guard let statePtr = refcon else { return }
|
|
485
|
+
let state = Unmanaged<NotificationState>.fromOpaque(statePtr).takeUnretainedValue()
|
|
486
|
+
let notifName = notification as String
|
|
487
|
+
let role = StringAttribute(element, kAXRoleAttribute as CFString) ?? ""
|
|
488
|
+
let title = StringAttribute(element, kAXTitleAttribute as CFString) ?? ""
|
|
489
|
+
state.received = notifName
|
|
490
|
+
state.elementInfo = "role=\(role) title=\(title)"
|
|
491
|
+
CFRunLoopStop(CFRunLoopGetCurrent())
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
var observer: AXObserver?
|
|
495
|
+
let createStatus = AXObserverCreate(pid, callback, &observer)
|
|
496
|
+
guard createStatus == .success, let obs = observer else {
|
|
497
|
+
throw NativeError.commandFailed("Failed to create AXObserver (AXError \(createStatus.rawValue)).")
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
let appElement = AXUIElementCreateApplication(pid)
|
|
501
|
+
let stateRef = Unmanaged.passRetained(state).toOpaque()
|
|
502
|
+
|
|
503
|
+
for notif in notifications {
|
|
504
|
+
let addStatus = AXObserverAddNotification(obs, appElement, notif as CFString, stateRef)
|
|
505
|
+
if addStatus != .success && addStatus != .notificationAlreadyRegistered {
|
|
506
|
+
fputs("Warning: failed to add notification '\(notif)' (AXError \(addStatus.rawValue))\n", stderr)
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// Observer를 현재 RunLoop에 추가
|
|
511
|
+
CFRunLoopAddSource(CFRunLoopGetCurrent(), AXObserverGetRunLoopSource(obs), .defaultMode)
|
|
512
|
+
|
|
513
|
+
// 타임아웃 기반으로 RunLoop 실행
|
|
514
|
+
CFRunLoopRunInMode(.defaultMode, timeout, false)
|
|
515
|
+
|
|
516
|
+
// 정리: retain 해제 및 알림 제거
|
|
517
|
+
Unmanaged<NotificationState>.fromOpaque(stateRef).release()
|
|
518
|
+
for notif in notifications {
|
|
519
|
+
AXObserverRemoveNotification(obs, appElement, notif as CFString)
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
if let received = state.received {
|
|
523
|
+
print("notification=\(received) \(state.elementInfo ?? "")")
|
|
524
|
+
return 0
|
|
525
|
+
} else {
|
|
526
|
+
print("No notification received within \(timeout)s timeout.")
|
|
527
|
+
return 0
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
func handleReadUIValue(_ parsed: ParsedOptions) throws -> Int32 {
|
|
532
|
+
let target = try resolveTarget(from: parsed)
|
|
533
|
+
try ensureAccessibilityTrusted()
|
|
534
|
+
try activateTarget(target)
|
|
535
|
+
let appRoot = try accessibilityRootElement(for: target)
|
|
536
|
+
|
|
537
|
+
let attributeStr = parsed.options["--attribute"] ?? "value"
|
|
538
|
+
let axAttribute: String
|
|
539
|
+
switch attributeStr {
|
|
540
|
+
case "value": axAttribute = kAXValueAttribute as String
|
|
541
|
+
case "selectedText": axAttribute = "AXSelectedText"
|
|
542
|
+
case "insertionPoint": axAttribute = "AXInsertionPointLineNumber"
|
|
543
|
+
case "numberOfCharacters": axAttribute = "AXNumberOfCharacters"
|
|
544
|
+
case "selectedTextRange": axAttribute = "AXSelectedTextRange"
|
|
545
|
+
default:
|
|
546
|
+
throw NativeError.invalidArguments("Unsupported attribute: \(attributeStr). Use: value, selectedText, insertionPoint, numberOfCharacters, selectedTextRange.")
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Find element by selector or use focused element
|
|
550
|
+
let element: AXUIElement
|
|
551
|
+
if let accessibilityId = parsed.options["--id"] {
|
|
552
|
+
guard let found = findAccessibilityElement(in: appRoot, identifier: accessibilityId, label: nil) else {
|
|
553
|
+
throw NativeError.commandFailed("No element with id: \(accessibilityId)")
|
|
554
|
+
}
|
|
555
|
+
element = found
|
|
556
|
+
} else if let label = parsed.options["--label"] {
|
|
557
|
+
guard let found = findAccessibilityElement(in: appRoot, identifier: nil, label: label) else {
|
|
558
|
+
throw NativeError.commandFailed("No element with label: \(label)")
|
|
559
|
+
}
|
|
560
|
+
element = found
|
|
561
|
+
} else {
|
|
562
|
+
var focusedRef: CFTypeRef?
|
|
563
|
+
let status = AXUIElementCopyAttributeValue(appRoot, "AXFocusedUIElement" as CFString, &focusedRef)
|
|
564
|
+
guard status == .success, let ref = focusedRef else {
|
|
565
|
+
throw NativeError.commandFailed("No focused element and no --id or --label provided.")
|
|
566
|
+
}
|
|
567
|
+
element = ref as! AXUIElement
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
var valueRef: CFTypeRef?
|
|
571
|
+
let status = AXUIElementCopyAttributeValue(element, axAttribute as CFString, &valueRef)
|
|
572
|
+
guard status == .success, let value = valueRef else {
|
|
573
|
+
print("(no value)")
|
|
574
|
+
return 0
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
if let str = value as? String {
|
|
578
|
+
print(str)
|
|
579
|
+
} else if let num = value as? NSNumber {
|
|
580
|
+
print(num.stringValue)
|
|
581
|
+
} else if CFGetTypeID(value) == AXValueGetTypeID() {
|
|
582
|
+
let axVal = value as! AXValue
|
|
583
|
+
if AXValueGetType(axVal) == .cfRange {
|
|
584
|
+
var range = CFRange(location: 0, length: 0)
|
|
585
|
+
AXValueGetValue(axVal, .cfRange, &range)
|
|
586
|
+
print("\(range.location),\(range.length)")
|
|
587
|
+
} else {
|
|
588
|
+
print(String(describing: value))
|
|
589
|
+
}
|
|
590
|
+
} else {
|
|
591
|
+
print(String(describing: value))
|
|
592
|
+
}
|
|
593
|
+
return 0
|
|
594
|
+
}
|