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/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.number().int().min(0).max(255);
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":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAyGA,wCAQC;AAED,sCAkBC;AAED,oCAOC;AAED,kDAyDC;AAQD,4DA2BC;AAGD,gCAIC;AAED,4BAMC;AAED,4CAIC;AAED,wCA4FC;AAMD,oCAsDC;AAuED,8BAEC;AAED,8BAgCC;AAED,gEAMC;AA9gBD,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,KAAK,CAAC;IACnC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAClB,CAAC,CAAC,QAAQ,CAAC,sEAAsE,CAAC,CAAC;AAEpF,6CAA6C;AAChC,QAAA,YAAY,GAA2B;IAClD,gBAAgB;IAChB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE;IACrC,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAC1B,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IACxB,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAC1B,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE;IACnC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;IACtC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE;IACtC,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAC3B,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACpB,eAAe;IACf,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IACrB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAClB,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IACzB,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;IACnB,aAAa;IACb,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IACzC,kBAAkB;IAClB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;IAC/C,0BAA0B;IAC1B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IAC7D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IAC/C,cAAc;IACd,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;IACxF,gBAAgB;IAChB,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACjD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IACtD,mBAAmB;IACnB,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE;IACvD,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IACzE,KAAK,EAAE,EAAE,EAAE,WAAW;CACvB,CAAC;AAEF;;;;GAIG;AACH,SAAgB,cAAc,CAAC,KAAsB;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,oBAAY,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,mDAAmD,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,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"}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export declare const PACKAGE_NAME = "mcp-baepsae";
2
- export declare const PACKAGE_VERSION = "6.2.0";
2
+ export declare const PACKAGE_VERSION = "6.3.0";
3
3
  //# sourceMappingURL=version.d.ts.map
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.2.0";
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
- // Open the menu
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
- // Find the item within the opened menu
192
- let menuChildren = Children(menuItem)
193
- var foundItem: UIElement? = nil
194
- for child in menuChildren {
195
- let items = Children(child)
196
- for item in items {
197
- if let title = StringAttribute(item, kAXTitleAttribute as CFString),
198
- normalizeText(title) == normalizeText(itemName) {
199
- foundItem = item
200
- break
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
- print("Performed: \(menuName) > \(itemName)")
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
+ }