mcp-baepsae 5.1.0 → 6.2.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 +98 -33
- package/README.md +101 -35
- package/bundled/baepsae-native +0 -0
- package/dist/backend.d.ts +26 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +79 -0
- package/dist/backend.js.map +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/tool-manifest.d.ts +12 -0
- package/dist/tool-manifest.d.ts.map +1 -0
- package/dist/tool-manifest.js +79 -0
- package/dist/tool-manifest.js.map +1 -0
- package/dist/tools/info.d.ts.map +1 -1
- package/dist/tools/info.js +104 -5
- package/dist/tools/info.js.map +1 -1
- package/dist/tools/input.js +7 -6
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/media.d.ts.map +1 -1
- package/dist/tools/media.js +137 -11
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/simulator.js +7 -7
- package/dist/tools/simulator.js.map +1 -1
- package/dist/tools/system.d.ts.map +1 -1
- package/dist/tools/system.js +2 -2
- package/dist/tools/system.js.map +1 -1
- package/dist/tools/ui.d.ts.map +1 -1
- package/dist/tools/ui.js +126 -8
- package/dist/tools/ui.js.map +1 -1
- package/dist/tools/workflow.d.ts +3 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +434 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +19 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +110 -5
- 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 +53 -33
- package/native/Sources/Commands/SystemCommands.swift +86 -0
- package/native/Sources/Commands/UICommands.swift +254 -35
- package/native/Sources/Commands/WindowCommands.swift +11 -4
- package/native/Sources/IndigoHID/IndigoHIDClient.swift +222 -0
- package/native/Sources/IndigoHID/IndigoHIDCoordinates.swift +74 -0
- package/native/Sources/IndigoHID/IndigoHIDEvents.swift +63 -0
- package/native/Sources/IndigoHID/IndigoHIDLoader.swift +102 -0
- package/native/Sources/IndigoHID/IndigoHIDTypes.swift +41 -0
- package/native/Sources/Types.swift +26 -0
- package/native/Sources/Utils.swift +653 -13
- package/native/Sources/Version.swift +1 -1
- package/native/Sources/main.swift +55 -8
- package/native/Tests/BaepsaeNativeTests/BinaryInvocationTests.swift +54 -6
- package/package.json +12 -3
- package/scripts/dump-tabbar-actions.mjs +312 -0
- package/scripts/generate-tool-manifest.mjs +75 -0
- package/scripts/research-coordinate-calibration.mjs +276 -0
- package/scripts/research-input-channels.mjs +327 -0
- package/scripts/research-tap-tab-grid.mjs +271 -0
- package/scripts/verify-media-capture.mjs +99 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOOL_CATEGORY_LABELS_KR = exports.TOOL_CATEGORY_ORDER = exports.TOOL_MANIFEST = void 0;
|
|
4
|
+
exports.formatToolManifestMarkdown = formatToolManifestMarkdown;
|
|
5
|
+
exports.formatToolManifestMarkdownKr = formatToolManifestMarkdownKr;
|
|
6
|
+
exports.TOOL_MANIFEST = [
|
|
7
|
+
{ name: "analyze_ui", category: "UI", summary: "Describe app UI hierarchy." },
|
|
8
|
+
{ name: "query_ui", category: "UI", summary: "Search app UI elements by text, identifier, or label." },
|
|
9
|
+
{ name: "tap", category: "UI", summary: "Tap coordinates or accessibility element." },
|
|
10
|
+
{ name: "tap_tab", category: "UI", summary: "Tap a tab in a tab bar by index." },
|
|
11
|
+
{ name: "type_text", category: "UI", summary: "Type text into the target app." },
|
|
12
|
+
{ name: "swipe", category: "UI", summary: "Perform swipe gesture in the target app." },
|
|
13
|
+
{ name: "scroll", category: "UI", summary: "Send scroll wheel events to the target app." },
|
|
14
|
+
{ name: "drag_drop", category: "UI", summary: "Drag and drop in the target app." },
|
|
15
|
+
{ name: "key", category: "Input", summary: "Press a single HID keycode in the target app." },
|
|
16
|
+
{ name: "key_sequence", category: "Input", summary: "Press multiple HID keycodes in sequence in the target app." },
|
|
17
|
+
{ name: "key_combo", category: "Input", summary: "Press key combo in the target app." },
|
|
18
|
+
{ name: "touch", category: "Input", summary: "Perform touch events in the target app." },
|
|
19
|
+
{ name: "run_steps", category: "Workflow", summary: "Execute ordered workflow steps using existing interaction tools." },
|
|
20
|
+
{ name: "list_windows", category: "System", summary: "List windows in the target app." },
|
|
21
|
+
{ name: "activate_app", category: "System", summary: "Bring the target app to foreground." },
|
|
22
|
+
{ name: "screenshot_app", category: "System", summary: "Take a screenshot of the target app window." },
|
|
23
|
+
{ name: "right_click", category: "System", summary: "Right-click in the target app." },
|
|
24
|
+
{ name: "list_simulators", category: "Simulator-only", summary: "List available simulators using simctl." },
|
|
25
|
+
{ name: "screenshot", category: "Simulator-only", summary: "Capture a screenshot from simulator display using simctl screenshot." },
|
|
26
|
+
{ name: "record_video", category: "Simulator-only", summary: "Record simulator display." },
|
|
27
|
+
{ name: "stream_video", category: "Simulator-only", summary: "Stream simulator frames." },
|
|
28
|
+
{ name: "open_url", category: "Simulator-only", summary: "Open a URL in the simulator." },
|
|
29
|
+
{ name: "install_app", category: "Simulator-only", summary: "Install an app on the simulator." },
|
|
30
|
+
{ name: "launch_app", category: "Simulator-only", summary: "Launch an installed app on the simulator." },
|
|
31
|
+
{ name: "terminate_app", category: "Simulator-only", summary: "Terminate a running app on the simulator." },
|
|
32
|
+
{ name: "uninstall_app", category: "Simulator-only", summary: "Uninstall an app from the simulator." },
|
|
33
|
+
{ name: "button", category: "Simulator-only", summary: "Press a simulator hardware button." },
|
|
34
|
+
{ name: "gesture", category: "Simulator-only", summary: "Execute a preset gesture pattern." },
|
|
35
|
+
{ name: "list_apps", category: "macOS/system", summary: "List running macOS applications with their bundle IDs." },
|
|
36
|
+
{ name: "menu_action", category: "macOS/system", summary: "Execute a menu bar action in a macOS app." },
|
|
37
|
+
{ name: "get_focused_app", category: "macOS/system", summary: "Get information about the currently focused macOS app." },
|
|
38
|
+
{ name: "clipboard", category: "macOS/system", summary: "Read or write the system clipboard." },
|
|
39
|
+
{ name: "baepsae_help", category: "Utility", summary: "Show help." },
|
|
40
|
+
{ name: "baepsae_version", category: "Utility", summary: "Show server and native binary versions." },
|
|
41
|
+
{ name: "doctor", category: "Utility", summary: "Run readiness self-checks for host process, native binary, simulator, and accessibility." },
|
|
42
|
+
];
|
|
43
|
+
exports.TOOL_CATEGORY_ORDER = [
|
|
44
|
+
"UI",
|
|
45
|
+
"Input",
|
|
46
|
+
"Workflow",
|
|
47
|
+
"System",
|
|
48
|
+
"Simulator-only",
|
|
49
|
+
"macOS/system",
|
|
50
|
+
"Utility",
|
|
51
|
+
];
|
|
52
|
+
exports.TOOL_CATEGORY_LABELS_KR = {
|
|
53
|
+
UI: "UI",
|
|
54
|
+
Input: "Input",
|
|
55
|
+
Workflow: "Workflow",
|
|
56
|
+
System: "System",
|
|
57
|
+
"Simulator-only": "iOS 시뮬레이터 전용",
|
|
58
|
+
"macOS/system": "macOS / 시스템",
|
|
59
|
+
Utility: "유틸리티",
|
|
60
|
+
};
|
|
61
|
+
function formatToolManifestMarkdown() {
|
|
62
|
+
const lines = ["### Official public MCP surface: unified generic tools", "", "The public API surface is intentionally single-scheme: use unified generic tools with a target argument, rather than `sim_*` / `mac_*` names.", "", "| Category | Tools |", "|---|---|"];
|
|
63
|
+
for (const category of exports.TOOL_CATEGORY_ORDER) {
|
|
64
|
+
const tools = exports.TOOL_MANIFEST.filter((entry) => entry.category === category).map((entry) => `\`${entry.name}\``).join(", ");
|
|
65
|
+
lines.push(`| ${category} | ${tools} |`);
|
|
66
|
+
}
|
|
67
|
+
lines.push("", "Target routing is explicit in the arguments: `udid` for simulator, `bundleId` / `appName` for macOS.");
|
|
68
|
+
return lines.join("\n");
|
|
69
|
+
}
|
|
70
|
+
function formatToolManifestMarkdownKr() {
|
|
71
|
+
const lines = ["### 공식 공개 MCP 표면: unified generic tools", "", "공개 API 표면은 단일 스킴으로 정리되어 있으며, `sim_*` / `mac_*` 이름 대신 target 인자를 받는 unified generic tools 를 사용합니다.", "", "| 분류 | 도구 |", "|---|---|"];
|
|
72
|
+
for (const category of exports.TOOL_CATEGORY_ORDER) {
|
|
73
|
+
const tools = exports.TOOL_MANIFEST.filter((entry) => entry.category === category).map((entry) => `\`${entry.name}\``).join(", ");
|
|
74
|
+
lines.push(`| ${exports.TOOL_CATEGORY_LABELS_KR[category]} | ${tools} |`);
|
|
75
|
+
}
|
|
76
|
+
lines.push("", "대상 라우팅은 인자로 명시합니다: simulator 는 `udid`, macOS 는 `bundleId` / `appName`.");
|
|
77
|
+
return lines.join("\n");
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=tool-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-manifest.js","sourceRoot":"","sources":["../src/tool-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/info.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/tools/info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/tools/info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoCzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6KzD"}
|
package/dist/tools/info.js
CHANGED
|
@@ -2,7 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerInfoTools = registerInfoTools;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
6
|
const utils_js_1 = require("../utils.js");
|
|
7
|
+
function captureParentProcessDetail() {
|
|
8
|
+
try {
|
|
9
|
+
return (0, node_child_process_1.execFileSync)("/bin/ps", ["-p", String(process.ppid), "-o", "pid=,ppid=,comm="], {
|
|
10
|
+
encoding: "utf8",
|
|
11
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
12
|
+
}).trim();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return "unknown";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function extractJsonObject(text) {
|
|
19
|
+
const match = text.match(/(\{[\s\S]*\})\s*$/);
|
|
20
|
+
if (!match)
|
|
21
|
+
return null;
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(match[1]);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
6
29
|
function registerInfoTools(server) {
|
|
7
30
|
server.tool("baepsae_help", "Show help. Optionally pass subcommand name for compatibility reference.", {
|
|
8
31
|
subcommand: zod_1.z
|
|
@@ -14,22 +37,32 @@ function registerInfoTools(server) {
|
|
|
14
37
|
`Server: ${utils_js_1.SERVER_NAME} v${utils_js_1.SERVER_VERSION}`,
|
|
15
38
|
"Mode: native-layer + simctl",
|
|
16
39
|
"",
|
|
40
|
+
"Official public MCP surface: unified generic tools",
|
|
41
|
+
"",
|
|
42
|
+
"The public API surface is intentionally single-scheme: use unified generic tools with a target argument, rather than sim_* / mac_* names.",
|
|
43
|
+
"",
|
|
17
44
|
"supported tools:",
|
|
18
45
|
"",
|
|
19
|
-
"UI
|
|
20
|
-
"- analyze_ui, query_ui, tap, type_text, swipe, scroll, drag_drop",
|
|
46
|
+
"UI:",
|
|
47
|
+
"- analyze_ui, query_ui, tap, tap_tab, type_text, swipe, scroll, drag_drop",
|
|
21
48
|
"",
|
|
22
|
-
"Input
|
|
49
|
+
"Input:",
|
|
23
50
|
"- key, key_sequence, key_combo, touch",
|
|
24
51
|
"",
|
|
25
|
-
"
|
|
52
|
+
"Workflow:",
|
|
53
|
+
"- run_steps",
|
|
54
|
+
"",
|
|
55
|
+
"System:",
|
|
26
56
|
"- list_windows, activate_app, screenshot_app, right_click",
|
|
27
57
|
"",
|
|
28
58
|
"Simulator-only:",
|
|
29
59
|
"- list_simulators, screenshot, record_video, stream_video, open_url, install_app, launch_app, terminate_app, uninstall_app, button, gesture",
|
|
30
60
|
"",
|
|
31
61
|
"macOS/system:",
|
|
32
|
-
"- list_apps, menu_action, get_focused_app, clipboard
|
|
62
|
+
"- list_apps, menu_action, get_focused_app, clipboard",
|
|
63
|
+
"",
|
|
64
|
+
"Utility:",
|
|
65
|
+
"- baepsae_help, baepsae_version, doctor",
|
|
33
66
|
"",
|
|
34
67
|
"Accessibility tip:",
|
|
35
68
|
"- launch_app -> analyze_ui/query_ui -> tap(id/label)",
|
|
@@ -64,6 +97,72 @@ function registerInfoTools(server) {
|
|
|
64
97
|
isError: false,
|
|
65
98
|
};
|
|
66
99
|
});
|
|
100
|
+
server.tool("doctor", "Run readiness self-checks for host process, parent process, native binary, booted simulator availability, and accessibility permission.", {}, async () => {
|
|
101
|
+
const host = {
|
|
102
|
+
ok: true,
|
|
103
|
+
detail: `${process.platform} ${process.arch}; node=${process.version}; pid=${process.pid}; ppid=${process.ppid}`,
|
|
104
|
+
};
|
|
105
|
+
const parent = {
|
|
106
|
+
ok: true,
|
|
107
|
+
detail: captureParentProcessDetail(),
|
|
108
|
+
};
|
|
109
|
+
const nativeBinary = (0, utils_js_1.tryResolveNativeBinaryPath)();
|
|
110
|
+
let nativeCheck = nativeBinary.ok
|
|
111
|
+
? { ok: true, detail: nativeBinary.path }
|
|
112
|
+
: { ok: false, detail: nativeBinary.error };
|
|
113
|
+
let simulator = { ok: false, detail: "native doctor not executed" };
|
|
114
|
+
let accessibility = { ok: false, detail: "native doctor not executed" };
|
|
115
|
+
if (nativeBinary.ok) {
|
|
116
|
+
const doctorResult = await (0, utils_js_1.runNative)(["doctor"]);
|
|
117
|
+
const parsed = doctorResult.content
|
|
118
|
+
.filter((item) => item.type === "text")
|
|
119
|
+
.map((item) => item.text)
|
|
120
|
+
.join("\n");
|
|
121
|
+
const json = extractJsonObject(parsed);
|
|
122
|
+
if (json && typeof json === "object") {
|
|
123
|
+
const report = json;
|
|
124
|
+
simulator = {
|
|
125
|
+
ok: Boolean(report.simulator?.ok),
|
|
126
|
+
detail: report.simulator?.detail ?? "unknown",
|
|
127
|
+
};
|
|
128
|
+
accessibility = {
|
|
129
|
+
ok: Boolean(report.accessibility?.ok),
|
|
130
|
+
detail: report.accessibility?.detail ?? "unknown",
|
|
131
|
+
};
|
|
132
|
+
nativeCheck = {
|
|
133
|
+
ok: true,
|
|
134
|
+
detail: `${nativeBinary.path} (doctor ok)`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
nativeCheck = {
|
|
139
|
+
ok: false,
|
|
140
|
+
detail: `${nativeBinary.path} (doctor output could not be parsed)`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const report = {
|
|
145
|
+
host,
|
|
146
|
+
parent,
|
|
147
|
+
nativeBinary: nativeCheck,
|
|
148
|
+
simulator,
|
|
149
|
+
accessibility,
|
|
150
|
+
};
|
|
151
|
+
const lines = [
|
|
152
|
+
"Doctor check completed.",
|
|
153
|
+
`host: ${host.ok ? "ok" : "warn"} — ${host.detail}`,
|
|
154
|
+
`parent: ${parent.ok ? "ok" : "warn"} — ${parent.detail}`,
|
|
155
|
+
`native binary: ${nativeCheck.ok ? "ok" : "warn"} — ${nativeCheck.detail}`,
|
|
156
|
+
`simulator: ${simulator.ok ? "ok" : "warn"} — ${simulator.detail}`,
|
|
157
|
+
`accessibility: ${accessibility.ok ? "ok" : "warn"} — ${accessibility.detail}`,
|
|
158
|
+
"",
|
|
159
|
+
JSON.stringify(report, null, 2),
|
|
160
|
+
];
|
|
161
|
+
return {
|
|
162
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
163
|
+
isError: !(host.ok && parent.ok && nativeCheck.ok && simulator.ok && accessibility.ok),
|
|
164
|
+
};
|
|
165
|
+
});
|
|
67
166
|
server.tool("list_apps", "List running macOS applications with their bundle IDs.", {}, async () => {
|
|
68
167
|
return await (0, utils_js_1.runNative)(["list-apps"]);
|
|
69
168
|
});
|
package/dist/tools/info.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/tools/info.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/tools/info.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/input.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.registerInputTools = registerInputTools;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const utils_js_1 = require("../utils.js");
|
|
6
|
+
const backend_js_1 = require("../backend.js");
|
|
6
7
|
const keySchema = {
|
|
7
8
|
keycode: utils_js_1.keycodeSchema.describe("HID keycode (0-255)"),
|
|
8
9
|
duration: zod_1.z.number().optional().describe("Hold duration in seconds"),
|
|
@@ -76,31 +77,31 @@ function registerInputTools(server) {
|
|
|
76
77
|
const args = ["button", params.buttonType];
|
|
77
78
|
(0, utils_js_1.pushOption)(args, "--duration", params.duration);
|
|
78
79
|
args.push("--udid", params.udid);
|
|
79
|
-
return await (0,
|
|
80
|
+
return await (0, backend_js_1.runBackend)("input", args);
|
|
80
81
|
});
|
|
81
82
|
server.tool("key", "Press a single HID keycode in the target app.", { ...utils_js_1.unifiedTargetSchema, ...keySchema }, async (params) => {
|
|
82
83
|
const target = (0, utils_js_1.resolveUnifiedTargetArgs)(params);
|
|
83
84
|
if (!Array.isArray(target))
|
|
84
85
|
return target;
|
|
85
|
-
return await (0,
|
|
86
|
+
return await (0, backend_js_1.runBackend)("input", buildKeyArgs(target, params));
|
|
86
87
|
});
|
|
87
88
|
server.tool("key_sequence", "Press multiple HID keycodes in sequence in the target app.", { ...utils_js_1.unifiedTargetSchema, ...keySequenceSchema }, async (params) => {
|
|
88
89
|
const target = (0, utils_js_1.resolveUnifiedTargetArgs)(params);
|
|
89
90
|
if (!Array.isArray(target))
|
|
90
91
|
return target;
|
|
91
|
-
return await (0,
|
|
92
|
+
return await (0, backend_js_1.runBackend)("input", buildKeySequenceArgs(target, params));
|
|
92
93
|
});
|
|
93
94
|
server.tool("key_combo", "Press key combo in the target app.", { ...utils_js_1.unifiedTargetSchema, ...keyComboSchema }, async (params) => {
|
|
94
95
|
const target = (0, utils_js_1.resolveUnifiedTargetArgs)(params);
|
|
95
96
|
if (!Array.isArray(target))
|
|
96
97
|
return target;
|
|
97
|
-
return await (0,
|
|
98
|
+
return await (0, backend_js_1.runBackend)("input", buildKeyComboArgs(target, params));
|
|
98
99
|
});
|
|
99
100
|
server.tool("touch", "Perform touch events in the target app.", { ...utils_js_1.unifiedTargetSchema, ...touchSchema }, async (params) => {
|
|
100
101
|
const target = (0, utils_js_1.resolveUnifiedTargetArgs)(params);
|
|
101
102
|
if (!Array.isArray(target))
|
|
102
103
|
return target;
|
|
103
|
-
return await (0,
|
|
104
|
+
return await (0, backend_js_1.runBackend)("input", buildTouchArgs(target, params));
|
|
104
105
|
});
|
|
105
106
|
server.tool("gesture", "Execute a preset gesture pattern.", {
|
|
106
107
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
@@ -118,7 +119,7 @@ function registerInputTools(server) {
|
|
|
118
119
|
(0, utils_js_1.pushOption)(args, "--pre-delay", params.preDelay);
|
|
119
120
|
(0, utils_js_1.pushOption)(args, "--post-delay", params.postDelay);
|
|
120
121
|
args.push("--udid", params.udid);
|
|
121
|
-
return await (0,
|
|
122
|
+
return await (0, backend_js_1.runBackend)("input", args);
|
|
122
123
|
});
|
|
123
124
|
}
|
|
124
125
|
//# sourceMappingURL=input.js.map
|
package/dist/tools/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tools/input.ts"],"names":[],"mappings":";;AA4GA,gDAoFC;AA/LD,6BAAwB;AAGxB,
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tools/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+GzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+G1D"}
|
package/dist/tools/media.js
CHANGED
|
@@ -2,43 +2,167 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerMediaTools = registerMediaTools;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
const promises_1 = require("node:fs/promises");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
9
|
const utils_js_1 = require("../utils.js");
|
|
10
|
+
const backend_js_1 = require("../backend.js");
|
|
11
|
+
function extractText(result) {
|
|
12
|
+
return result.content
|
|
13
|
+
.filter((item) => item.type === "text")
|
|
14
|
+
.map((item) => item.text)
|
|
15
|
+
.join("\n");
|
|
16
|
+
}
|
|
17
|
+
function rewriteTextContent(result, search, replace) {
|
|
18
|
+
return {
|
|
19
|
+
...result,
|
|
20
|
+
content: result.content.map((item) => item.type === "text"
|
|
21
|
+
? { ...item, text: item.text.split(search).join(replace) }
|
|
22
|
+
: item),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function createStagingPath(finalPath, extension) {
|
|
26
|
+
const finalBaseName = (0, node_path_1.basename)(finalPath);
|
|
27
|
+
const suffix = `-${(0, node_crypto_1.randomUUID)()}`;
|
|
28
|
+
const preferredBaseName = finalBaseName.endsWith(`.${extension}`)
|
|
29
|
+
? finalBaseName.replace(new RegExp(`\\.${extension}$`), `${suffix}.${extension}`)
|
|
30
|
+
: `mcp-baepsae-media-${Date.now()}${suffix}.${extension}`;
|
|
31
|
+
return (0, node_path_1.join)((0, node_os_1.tmpdir)(), preferredBaseName);
|
|
32
|
+
}
|
|
33
|
+
async function finalizeStagedCapture(result, stagingPath, finalPath) {
|
|
34
|
+
if (result.isError) {
|
|
35
|
+
await (0, promises_1.rm)(stagingPath, { force: true }).catch(() => { });
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const info = await (0, promises_1.stat)(stagingPath);
|
|
40
|
+
if (!info.isFile() || info.size <= 0) {
|
|
41
|
+
throw new Error("Capture file was not created or is empty.");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
await (0, promises_1.rm)(stagingPath, { force: true }).catch(() => { });
|
|
46
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
47
|
+
return {
|
|
48
|
+
content: [{ type: "text", text: `${extractText(result)}\n\nPost-processing failed.\nExpected staging file: ${stagingPath}\nReason: ${message}`.trim() }],
|
|
49
|
+
isError: true,
|
|
50
|
+
error: (0, utils_js_1.makeToolError)({
|
|
51
|
+
code: "execution.capture_output_missing",
|
|
52
|
+
category: "execution",
|
|
53
|
+
message,
|
|
54
|
+
retryable: true,
|
|
55
|
+
source: "runtime",
|
|
56
|
+
}),
|
|
57
|
+
metadata: {
|
|
58
|
+
...(result.metadata ?? {}),
|
|
59
|
+
stagingOutputPath: stagingPath,
|
|
60
|
+
outputPath: finalPath,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await (0, promises_1.copyFile)(stagingPath, finalPath);
|
|
66
|
+
await (0, promises_1.rm)(stagingPath, { force: true }).catch(() => { });
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
70
|
+
return {
|
|
71
|
+
content: [{
|
|
72
|
+
type: "text",
|
|
73
|
+
text: `${extractText(result)}\n\nPost-processing failed.\nStaging file: ${stagingPath}\nRequested output: ${finalPath}\nReason: ${message}`.trim(),
|
|
74
|
+
}],
|
|
75
|
+
isError: true,
|
|
76
|
+
error: (0, utils_js_1.makeToolError)({
|
|
77
|
+
code: "execution.capture_output_finalize_failed",
|
|
78
|
+
category: "execution",
|
|
79
|
+
message,
|
|
80
|
+
retryable: true,
|
|
81
|
+
source: "runtime",
|
|
82
|
+
}),
|
|
83
|
+
metadata: {
|
|
84
|
+
...(result.metadata ?? {}),
|
|
85
|
+
stagingOutputPath: stagingPath,
|
|
86
|
+
outputPath: finalPath,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const rewritten = rewriteTextContent(result, stagingPath, finalPath);
|
|
91
|
+
return {
|
|
92
|
+
...rewritten,
|
|
93
|
+
metadata: {
|
|
94
|
+
...(rewritten.metadata ?? {}),
|
|
95
|
+
stagingOutputPath: stagingPath,
|
|
96
|
+
outputPath: finalPath,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
6
100
|
function registerMediaTools(server) {
|
|
7
|
-
server.tool("stream_video", "
|
|
101
|
+
server.tool("stream_video", "Capture a time-bounded simulator clip through the native stream-video shim.", {
|
|
8
102
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
9
|
-
output: zod_1.z.string().optional().describe("Destination
|
|
10
|
-
durationSeconds: zod_1.z
|
|
103
|
+
output: zod_1.z.string().optional().describe("Destination MOV file path for the captured clip"),
|
|
104
|
+
durationSeconds: zod_1.z
|
|
105
|
+
.number()
|
|
106
|
+
.positive()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe("Requested clip duration in seconds (currently used as a timeout budget)"),
|
|
11
109
|
}, async (params) => {
|
|
12
110
|
const args = ["stream-video", "--udid", params.udid];
|
|
13
111
|
const durationSeconds = params.durationSeconds ?? 10;
|
|
14
112
|
const outputPath = params.output ?? `simulator-stream-${Date.now()}.mov`;
|
|
15
113
|
const resolvedOutput = await (0, utils_js_1.ensureOutputPath)(outputPath);
|
|
114
|
+
const stagingOutput = createStagingPath(resolvedOutput, "mov");
|
|
16
115
|
(0, utils_js_1.pushOption)(args, "--duration", durationSeconds);
|
|
17
|
-
args.push("--output",
|
|
18
|
-
|
|
116
|
+
args.push("--output", stagingOutput);
|
|
117
|
+
const result = await (0, backend_js_1.runBackend)("utility", args, {
|
|
19
118
|
timeoutMs: Math.max(15_000, Math.round((durationSeconds + 15) * 1000)),
|
|
20
119
|
}, {
|
|
21
|
-
extraLines: [
|
|
120
|
+
extraLines: [
|
|
121
|
+
"Capture mode: stream-video shim.",
|
|
122
|
+
"Backend: simctl recordVideo (current implementation).",
|
|
123
|
+
`Requested duration: ${durationSeconds}s`,
|
|
124
|
+
`Output file: ${resolvedOutput}`,
|
|
125
|
+
],
|
|
126
|
+
metadata: {
|
|
127
|
+
captureMode: "stream_video_shim",
|
|
128
|
+
backend: "simctl.recordVideo",
|
|
129
|
+
requestedDurationSeconds: durationSeconds,
|
|
130
|
+
outputPath: resolvedOutput,
|
|
131
|
+
},
|
|
22
132
|
});
|
|
133
|
+
return await finalizeStagedCapture(result, stagingOutput, resolvedOutput);
|
|
23
134
|
});
|
|
24
|
-
server.tool("record_video", "Record simulator display.", {
|
|
135
|
+
server.tool("record_video", "Record simulator display directly with simctl recordVideo.", {
|
|
25
136
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
26
137
|
output: zod_1.z.string().optional().describe("Output MOV file path"),
|
|
27
|
-
durationSeconds: zod_1.z
|
|
138
|
+
durationSeconds: zod_1.z
|
|
139
|
+
.number()
|
|
140
|
+
.positive()
|
|
141
|
+
.optional()
|
|
142
|
+
.describe("Requested recording duration in seconds (default: 10)"),
|
|
28
143
|
}, async (params) => {
|
|
29
144
|
const durationSeconds = params.durationSeconds ?? 10;
|
|
30
145
|
const outputPath = params.output ?? `simulator-recording-${Date.now()}.mov`;
|
|
31
146
|
const resolvedOutput = await (0, utils_js_1.ensureOutputPath)(outputPath);
|
|
147
|
+
const stagingOutput = createStagingPath(resolvedOutput, "mov");
|
|
32
148
|
const extraLines = [
|
|
33
|
-
|
|
149
|
+
"Capture mode: direct simctl recordVideo.",
|
|
150
|
+
`Requested duration: ${durationSeconds}s`,
|
|
34
151
|
`Output file: ${resolvedOutput}`,
|
|
35
152
|
];
|
|
36
|
-
|
|
153
|
+
const result = await (0, backend_js_1.runBackend)("simulator", ["io", params.udid, "recordVideo", "--force", stagingOutput], {
|
|
37
154
|
timeoutMs: Math.max(15_000, Math.round((durationSeconds + 5) * 1000)),
|
|
38
155
|
}, {
|
|
39
156
|
timeoutIsExpected: true,
|
|
40
157
|
extraLines,
|
|
158
|
+
metadata: {
|
|
159
|
+
captureMode: "record_video_direct",
|
|
160
|
+
backend: "simctl.recordVideo",
|
|
161
|
+
requestedDurationSeconds: durationSeconds,
|
|
162
|
+
outputPath: resolvedOutput,
|
|
163
|
+
},
|
|
41
164
|
});
|
|
165
|
+
return await finalizeStagedCapture(result, stagingOutput, resolvedOutput);
|
|
42
166
|
});
|
|
43
167
|
server.tool("screenshot", "Capture a screenshot from simulator display using simctl screenshot.", {
|
|
44
168
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
@@ -46,9 +170,11 @@ function registerMediaTools(server) {
|
|
|
46
170
|
}, async (params) => {
|
|
47
171
|
const outputPath = params.output ?? `simulator-screenshot-${Date.now()}.png`;
|
|
48
172
|
const resolvedOutput = await (0, utils_js_1.ensureOutputPath)(outputPath);
|
|
49
|
-
|
|
173
|
+
const stagingOutput = createStagingPath(resolvedOutput, "png");
|
|
174
|
+
const result = await (0, backend_js_1.runBackend)("simulator", ["io", params.udid, "screenshot", stagingOutput], undefined, {
|
|
50
175
|
extraLines: [`Output file: ${resolvedOutput}`],
|
|
51
176
|
});
|
|
177
|
+
return await finalizeStagedCapture(result, stagingOutput, resolvedOutput);
|
|
52
178
|
});
|
|
53
179
|
}
|
|
54
180
|
//# sourceMappingURL=media.js.map
|
package/dist/tools/media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/simulator.js
CHANGED
|
@@ -3,29 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.registerSimulatorTools = registerSimulatorTools;
|
|
4
4
|
const node_path_1 = require("node:path");
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
|
-
const
|
|
6
|
+
const backend_js_1 = require("../backend.js");
|
|
7
7
|
function registerSimulatorTools(server) {
|
|
8
8
|
server.tool("list_simulators", "List available simulators using simctl.", {}, async () => {
|
|
9
|
-
return await (0,
|
|
9
|
+
return await (0, backend_js_1.runBackend)("simulator", ["list", "devices", "available"]);
|
|
10
10
|
});
|
|
11
11
|
server.tool("open_url", "Open a URL in the simulator (e.g. Safari or deep link).", {
|
|
12
12
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
13
13
|
url: zod_1.z.string().min(1).describe("URL to open"),
|
|
14
14
|
}, async (params) => {
|
|
15
|
-
return await (0,
|
|
15
|
+
return await (0, backend_js_1.runBackend)("simulator", ["openurl", params.udid, params.url]);
|
|
16
16
|
});
|
|
17
17
|
server.tool("install_app", "Install an app (.app, .ipa) on the simulator.", {
|
|
18
18
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
19
19
|
path: zod_1.z.string().min(1).describe("Path to .app or .ipa file"),
|
|
20
20
|
}, async (params) => {
|
|
21
21
|
const resolvedPath = (0, node_path_1.resolve)(params.path);
|
|
22
|
-
return await (0,
|
|
22
|
+
return await (0, backend_js_1.runBackend)("simulator", ["install", params.udid, resolvedPath]);
|
|
23
23
|
});
|
|
24
24
|
server.tool("uninstall_app", "Uninstall an app from the simulator.", {
|
|
25
25
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
26
26
|
bundleId: zod_1.z.string().min(1).describe("App Bundle Identifier (e.g. com.example.app)"),
|
|
27
27
|
}, async (params) => {
|
|
28
|
-
return await (0,
|
|
28
|
+
return await (0, backend_js_1.runBackend)("simulator", ["uninstall", params.udid, params.bundleId]);
|
|
29
29
|
});
|
|
30
30
|
server.tool("launch_app", "Launch an installed app on the simulator.", {
|
|
31
31
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
@@ -40,13 +40,13 @@ function registerSimulatorTools(server) {
|
|
|
40
40
|
const env = params.env
|
|
41
41
|
? Object.fromEntries(Object.entries(params.env).map(([k, v]) => [`SIMCTL_CHILD_${k}`, v]))
|
|
42
42
|
: undefined;
|
|
43
|
-
return await (0,
|
|
43
|
+
return await (0, backend_js_1.runBackend)("simulator", args, { env });
|
|
44
44
|
});
|
|
45
45
|
server.tool("terminate_app", "Terminate a running app on the simulator.", {
|
|
46
46
|
udid: zod_1.z.string().min(1).describe("Simulator UDID"),
|
|
47
47
|
bundleId: zod_1.z.string().min(1).describe("App Bundle Identifier"),
|
|
48
48
|
}, async (params) => {
|
|
49
|
-
return await (0,
|
|
49
|
+
return await (0, backend_js_1.runBackend)("simulator", ["terminate", params.udid, params.bundleId]);
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
//# sourceMappingURL=simulator.js.map
|