appium-mcp 1.81.7 → 1.82.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/CHANGELOG.md +6 -0
- package/dist/tests/tools/session/session.test.js +61 -62
- package/dist/tests/tools/session/session.test.js.map +1 -1
- package/dist/tools/session/attach-session.d.ts +7 -2
- package/dist/tools/session/attach-session.d.ts.map +1 -1
- package/dist/tools/session/attach-session.js +61 -23
- package/dist/tools/session/attach-session.js.map +1 -1
- package/dist/tools/session/session.d.ts.map +1 -1
- package/dist/tools/session/session.js +3 -4
- package/dist/tools/session/session.js.map +1 -1
- package/dist/utils/url.d.ts +1 -1
- package/dist/utils/url.d.ts.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/resources/submodules.zip +0 -0
- package/src/tools/session/attach-session.ts +82 -31
- package/src/tools/session/session.ts +3 -4
- package/src/utils/url.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [1.82.0](https://github.com/appium/appium-mcp/compare/v1.81.7...v1.82.0) (2026-06-02)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* **attach-session:** fetch capabilities automatically from server when attaching sessions ([#380](https://github.com/appium/appium-mcp/issues/380)) ([69934b0](https://github.com/appium/appium-mcp/commit/69934b0b3893fa9bc05cadfe6a41b9018679e89e))
|
|
6
|
+
|
|
1
7
|
## [1.81.7](https://github.com/appium/appium-mcp/compare/v1.81.6...v1.81.7) (2026-06-02)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -74,6 +74,9 @@ const mockSetSession = setSession;
|
|
|
74
74
|
const { buildAndroidCapabilities, buildIOSCapabilities, getPortFromUrl, validateRemoteServerUrl, } = await import('../../../tools/session/create-session.js');
|
|
75
75
|
// ── tool helper ───────────────────────────────────────────────────────────────
|
|
76
76
|
const mockServer = { addTool: jest.fn() };
|
|
77
|
+
// Default fetch mock: both capability endpoints return nothing (404-like).
|
|
78
|
+
// Individual tests override this for the specific responses they need.
|
|
79
|
+
let mockFetch;
|
|
77
80
|
beforeEach(() => {
|
|
78
81
|
jest.clearAllMocks();
|
|
79
82
|
mockSelectedDevicePlatform = 'ios';
|
|
@@ -82,6 +85,10 @@ beforeEach(() => {
|
|
|
82
85
|
sessionId: 'attached-session-id',
|
|
83
86
|
capabilities: { platformName: 'Android' },
|
|
84
87
|
});
|
|
88
|
+
mockFetch = jest.fn().mockResolvedValue({
|
|
89
|
+
ok: false,
|
|
90
|
+
});
|
|
91
|
+
global.fetch = mockFetch;
|
|
85
92
|
});
|
|
86
93
|
async function getToolExecute() {
|
|
87
94
|
const { default: session } = await import('../../../tools/session/session.js');
|
|
@@ -180,69 +187,67 @@ describe('appium_session_management tool', () => {
|
|
|
180
187
|
expect(result.isError).toBe(true);
|
|
181
188
|
expect(result.content[0].text).toBe('sessionId is required for attach action');
|
|
182
189
|
});
|
|
183
|
-
test('
|
|
190
|
+
test('fetches capabilities from server before creating client and prefers W3C extension endpoint', async () => {
|
|
184
191
|
const tool = await getToolExecute();
|
|
185
192
|
mockListSessions.mockReturnValue([
|
|
186
193
|
{ sessionId: 'borrowed', isActive: true, ownership: 'attached' },
|
|
187
194
|
]);
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
195
|
+
mockFetch.mockImplementation(async (input) => {
|
|
196
|
+
const url = input.toString();
|
|
197
|
+
if (url.includes('appium/session_capabilities')) {
|
|
198
|
+
return {
|
|
199
|
+
ok: true,
|
|
200
|
+
json: async () => ({
|
|
201
|
+
value: {
|
|
202
|
+
platformName: 'Android',
|
|
203
|
+
automationName: 'UiAutomator2',
|
|
204
|
+
},
|
|
205
|
+
}),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
ok: true,
|
|
210
|
+
json: async () => ({
|
|
211
|
+
value: {
|
|
212
|
+
platformName: 'iOS',
|
|
213
|
+
automationName: 'XCUITest',
|
|
214
|
+
deviceName: 'Ignored Device',
|
|
215
|
+
},
|
|
216
|
+
}),
|
|
217
|
+
};
|
|
201
218
|
});
|
|
202
219
|
const result = await tool.execute({
|
|
203
220
|
action: 'attach',
|
|
204
221
|
remoteServerUrl: 'http://localhost:4723',
|
|
205
222
|
sessionId: 'borrowed',
|
|
206
|
-
capabilities: {
|
|
207
|
-
platformName: 'Provided',
|
|
208
|
-
automationName: 'UiAutomator2',
|
|
209
|
-
deviceName: 'Pixel 9 Pro XL',
|
|
210
|
-
'appium:app': 'demo.apk',
|
|
211
|
-
},
|
|
223
|
+
capabilities: { 'appium:app': 'demo.apk' },
|
|
212
224
|
}, undefined);
|
|
213
225
|
expect(result.isError).toBeFalsy();
|
|
214
226
|
expect(result.content[0].text).toContain('Attached to existing session');
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
port: 4723,
|
|
220
|
-
path: '/',
|
|
221
|
-
capabilities: {
|
|
222
|
-
platformName: 'Provided',
|
|
223
|
-
automationName: 'UiAutomator2',
|
|
224
|
-
deviceName: 'Pixel 9 Pro XL',
|
|
225
|
-
'appium:app': 'demo.apk',
|
|
226
|
-
},
|
|
227
|
-
});
|
|
227
|
+
// Client created with merged caps — W3C extension wins over deprecated and caller
|
|
228
|
+
expect(mockAttachToSession).toHaveBeenCalledWith(expect.objectContaining({
|
|
229
|
+
capabilities: expect.objectContaining({ platformName: 'Android' }),
|
|
230
|
+
}));
|
|
228
231
|
expect(mockSetSession).toHaveBeenCalledWith(expect.anything(), 'borrowed', {
|
|
229
|
-
'appium:app': 'demo.apk',
|
|
230
232
|
platformName: 'Android',
|
|
231
233
|
'appium:automationName': 'UiAutomator2',
|
|
232
234
|
'appium:deviceName': 'Ignored Device',
|
|
235
|
+
'appium:app': 'demo.apk',
|
|
233
236
|
}, 'attached', expect.any(String));
|
|
234
237
|
});
|
|
235
|
-
test('falls back to
|
|
238
|
+
test('falls back to deprecated session endpoint when W3C extension is unavailable', async () => {
|
|
236
239
|
const tool = await getToolExecute();
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
240
|
+
mockFetch.mockImplementation(async (input) => {
|
|
241
|
+
const url = input.toString();
|
|
242
|
+
if (url.includes('appium/session_capabilities')) {
|
|
243
|
+
return { ok: false };
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
ok: true,
|
|
247
|
+
json: async () => ({
|
|
248
|
+
value: { platformName: 'Android', automationName: 'UiAutomator2' },
|
|
249
|
+
}),
|
|
250
|
+
};
|
|
246
251
|
});
|
|
247
252
|
const result = await tool.execute({
|
|
248
253
|
action: 'attach',
|
|
@@ -255,39 +260,33 @@ describe('appium_session_management tool', () => {
|
|
|
255
260
|
}, undefined);
|
|
256
261
|
expect(result.isError).toBeFalsy();
|
|
257
262
|
expect(mockSetSession).toHaveBeenCalledWith(expect.anything(), 'borrowed', {
|
|
258
|
-
'appium:app': 'demo.apk',
|
|
259
263
|
platformName: 'Android',
|
|
260
264
|
'appium:automationName': 'UiAutomator2',
|
|
261
265
|
'appium:deviceName': 'Pixel 9 Pro XL',
|
|
266
|
+
'appium:app': 'demo.apk',
|
|
262
267
|
}, 'attached', expect.any(String));
|
|
263
268
|
});
|
|
264
|
-
test('
|
|
269
|
+
test('returns error when both capability endpoints are unreachable', async () => {
|
|
265
270
|
const tool = await getToolExecute();
|
|
266
|
-
|
|
267
|
-
sessionId: 'attached-session-id',
|
|
268
|
-
});
|
|
271
|
+
// mockFetch already returns ok: false for both endpoints by default
|
|
269
272
|
const result = await tool.execute({
|
|
270
273
|
action: 'attach',
|
|
271
274
|
remoteServerUrl: 'http://localhost:4723',
|
|
272
275
|
sessionId: 'borrowed',
|
|
273
|
-
capabilities: {
|
|
274
|
-
platformName: 'Android',
|
|
275
|
-
'appium:automationName': 'UiAutomator2',
|
|
276
|
-
deviceName: 'Pixel 9 Pro XL',
|
|
277
|
-
'appium:app': 'demo.apk',
|
|
278
|
-
},
|
|
276
|
+
capabilities: { platformName: 'Android' },
|
|
279
277
|
}, undefined);
|
|
280
|
-
expect(result.isError).
|
|
281
|
-
expect(
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
'appium:automationName': 'UiAutomator2',
|
|
285
|
-
'appium:deviceName': 'Pixel 9 Pro XL',
|
|
286
|
-
}, 'attached', expect.any(String));
|
|
278
|
+
expect(result.isError).toBe(true);
|
|
279
|
+
expect(result.content[0].text).toContain('Failed to fetch capabilities');
|
|
280
|
+
expect(result.content[0].text).toContain('borrowed');
|
|
281
|
+
expect(mockAttachToSession).not.toHaveBeenCalled();
|
|
287
282
|
});
|
|
288
283
|
test('detaches an existing attached session before re-attaching the same id', async () => {
|
|
289
284
|
const tool = await getToolExecute();
|
|
290
285
|
mockGetSessionOwnership.mockReturnValue('attached');
|
|
286
|
+
mockFetch.mockResolvedValue({
|
|
287
|
+
ok: true,
|
|
288
|
+
json: async () => ({ value: { platformName: 'Android' } }),
|
|
289
|
+
});
|
|
291
290
|
const result = await tool.execute({
|
|
292
291
|
action: 'attach',
|
|
293
292
|
remoteServerUrl: 'http://localhost:4723',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/session/session.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/session/session.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEzE,iFAAiF;AAEjF,MAAM,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAEjC,KAAK,EAAE,QAAiC,EAAE,EAAE,CAAC,CAAC;IAC9C,SAAS,EAAE,qBAAqB;IAChC,YAAY,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;CAC1C,CAAC,CAAC,CAAC;AAEJ,IAAI,0BAA0B,GAA6B,KAAK,CAAC;AAEjE,IAAI,CAAC,mBAAmB,CAAC,sCAAsC,EAAE,GAAG,EAAE,CAAC,CAAC;IACtE,iBAAiB,EAAE,GAAG,EAAE,CAAC,aAAa;IACtC,yBAAyB,EAAE,GAAG,EAAE,CAAC,0BAA0B;IAC3D,qBAAqB,EAAE,GAAG,EAAE,CAC1B,0BAA0B,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;IAC3D,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACtE,mBAAmB,EAAE,GAAG,EAAE,GAAE,CAAC;CAC9B,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,UAAU,EAAE;QACV,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;YAClB,gBAAgB,EAAE,KAAK,EAAE,EAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACtD,CAAC;KACH;CACF,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;CAC9E,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,yBAAyB,EAAE;KAAQ;CACpC,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,cAAc,EAAE;KAAQ;CACzB,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE;QACP,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;QAC5D,eAAe,EAAE,mBAAmB;KACrC;CACF,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,2BAA2B,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACjD,wBAAwB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;IACjD,sBAAsB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IAC/C,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;CAC/C,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IACxC,sBAAsB,EAAE,IAAI,CAAC,EAAE,EAAE;IACjC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;IACrB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;IACpB,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC9B,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE;IACvB,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE;IACvB,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;IACxB,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC3B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC5B,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;IAC1B,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;CAC7C,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1D,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC,wBAAwB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IAC3C,uBAAuB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAY,EAAE,GAAQ,EAAE,EAAE,CAAC,OAAO,CAAC;CACtE,CAAC,CAAC,CAAC;AAEJ,iFAAiF;AAEjF,MAAM,EACJ,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,GACX,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAE9C,MAAM,aAAa,GAAG,SAAkD,CAAC;AACzE,MAAM,uBAAuB,GAAG,mBAE/B,CAAC;AACF,MAAM,gBAAgB,GAAG,YAExB,CAAC;AACF,MAAM,gBAAgB,GAAG,YAExB,CAAC;AACF,MAAM,iBAAiB,GAAG,aAEzB,CAAC;AACF,MAAM,oBAAoB,GAAG,gBAE5B,CAAC;AACF,MAAM,qBAAqB,GAAG,iBAE7B,CAAC;AACF,MAAM,cAAc,GAAG,UAAoD,CAAC;AAE5E,MAAM,EACJ,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,GACxB,GAAG,MAAM,MAAM,CAAC,0CAA0C,CAAC,CAAC;AAE7D,iFAAiF;AAEjF,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAS,CAAC;AAEjD,2EAA2E;AAC3E,uEAAuE;AACvE,IAAI,SAA4C,CAAC;AAEjD,UAAU,CAAC,GAAG,EAAE;IACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACrB,0BAA0B,GAAG,KAAK,CAAC;IACnC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9C,mBAAmB,CAAC,iBAAiB,CAAC;QACpC,SAAS,EAAE,qBAAqB;QAChC,YAAY,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;KAC1C,CAAC,CAAC;IACH,SAAS,GAAG,IAAI,CAAC,EAAE,EAAgB,CAAC,iBAAiB,CAAC;QACpD,EAAE,EAAE,KAAK;KACE,CAAC,CAAC;IACf,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,cAAc;IAC3B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GACxB,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IACpD,OAAO,CAAC,UAAU,CAAC,CAAC;IACpB,OAAQ,UAAU,CAAC,OAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACnE,CAAC,CAAC,CACH,EAAE,CAAC,CAAC,CAAC,CAAC;AACT,CAAC;AAED,4FAA4F;AAE5F,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAErC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,gBAAgB,CAAC,eAAe,CAAC;gBAC/B;oBACE,SAAS,EAAE,QAAQ;oBACnB,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,OAAO;oBAClB,QAAQ,EAAE,SAAS;oBACnB,cAAc,EAAE,cAAc;oBAC9B,UAAU,EAAE,SAAS;oBACrB,cAAc,EAAE,YAAY;iBAC7B;aACK,CAAC,CAAC;YACV,gBAAgB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC3C,aAAa,CAAC,eAAe,CAAC;gBAC5B,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;aAChC,CAAC,CAAC;YAEV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,yCAAyC,CAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,oBAAoB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EACzC,SAAS,CACV,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAE3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EACzC,SAAS,CACV,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,uBAAuB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACjD,qBAAqB,CAAC,iBAAiB,CAAC,IAAW,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,qBAAqB,CAAC,iBAAiB,CAAC,IAAW,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,EAC3C,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACjE,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,uBAAuB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACjD,qBAAqB,CAAC,iBAAiB,CAAC,KAAY,CAAC,CAAC;YAEtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EACxC,SAAS,CACV,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,EAC3C,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,+CAA+C,CAChD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,uBAAuB,EAAE,EAC9D,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,yCAAyC,CAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;YAC5G,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,gBAAgB,CAAC,eAAe,CAAC;gBAC/B,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE;aAC1D,CAAC,CAAC;YACV,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;oBAChD,OAAO;wBACL,EAAE,EAAE,IAAI;wBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;4BACjB,KAAK,EAAE;gCACL,YAAY,EAAE,SAAS;gCACvB,cAAc,EAAE,cAAc;6BAC/B;yBACF,CAAC;qBACS,CAAC;gBAChB,CAAC;gBACD,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;wBACjB,KAAK,EAAE;4BACL,YAAY,EAAE,KAAK;4BACnB,cAAc,EAAE,UAAU;4BAC1B,UAAU,EAAE,gBAAgB;yBAC7B;qBACF,CAAC;iBACS,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B;gBACE,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,uBAAuB;gBACxC,SAAS,EAAE,UAAU;gBACrB,YAAY,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE;aAC3C,EACD,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YACzE,kFAAkF;YAClF,MAAM,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAC9C,MAAM,CAAC,gBAAgB,CAAC;gBACtB,YAAY,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;aACnE,CAAC,CACH,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,QAAQ,EAAE,EACjB,UAAU,EACV;gBACE,YAAY,EAAE,SAAS;gBACvB,uBAAuB,EAAE,cAAc;gBACvC,mBAAmB,EAAE,gBAAgB;gBACrC,YAAY,EAAE,UAAU;aACzB,EACD,UAAU,EACV,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;oBAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAc,CAAC;gBACnC,CAAC;gBACD,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;wBACjB,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE;qBACnE,CAAC;iBACS,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B;gBACE,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,uBAAuB;gBACxC,SAAS,EAAE,UAAU;gBACrB,YAAY,EAAE;oBACZ,UAAU,EAAE,gBAAgB;oBAC5B,YAAY,EAAE,UAAU;iBACzB;aACF,EACD,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,QAAQ,EAAE,EACjB,UAAU,EACV;gBACE,YAAY,EAAE,SAAS;gBACvB,uBAAuB,EAAE,cAAc;gBACvC,mBAAmB,EAAE,gBAAgB;gBACrC,YAAY,EAAE,UAAU;aACzB,EACD,UAAU,EACV,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,oEAAoE;YAEpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B;gBACE,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,uBAAuB;gBACxC,SAAS,EAAE,UAAU;gBACrB,YAAY,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;aAC1C,EACD,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,uBAAuB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACpD,SAAS,CAAC,iBAAiB,CAAC;gBAC1B,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC;aAC/C,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B;gBACE,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,uBAAuB;gBACxC,SAAS,EAAE,UAAU;aACtB,EACD,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,uBAAuB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B;gBACE,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,uBAAuB;gBACxC,SAAS,EAAE,eAAe;aAC3B,EACD,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1D,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjD,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,uBAAuB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,EAChD,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1D,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,uBAAuB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,EAC3C,SAAS,CACV,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YAClE,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,wCAAwC,CACzC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACnE,0BAA0B,GAAG,SAAS,CAAC;QAEvC,MAAM,IAAI,GAAG,wBAAwB,CACnC,EAAE,YAAY,EAAE,eAAe,EAAE,EACjC,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAC3B,KAAK,CACN,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACxD,0BAA0B,GAAG,KAAK,CAAC;QAEnC,MAAM,IAAI,GAAG,wBAAwB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAE5D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,wBAAwB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC/D,0BAA0B,GAAG,KAAK,CAAC;QAEnC,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACrC,EAAE,YAAY,EAAE,OAAO,EAAE,EACzB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,EACxC,KAAK,CACN,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,0BAA0B,GAAG,SAAS,CAAC;QAEvC,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAE9D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC;QACR,CAAC,qCAAqC,EAAE,GAAG,CAAC;QAC5C,CAAC,yBAAyB,EAAE,EAAE,CAAC;QAC/B,CAAC,8BAA8B,EAAE,IAAI,CAAC;QACtC,CAAC,+BAA+B,EAAE,IAAI,CAAC;KACxC,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,CAAC,IAAI,CAAC,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC,CACzD,uBAAuB,EACvB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAClE,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAC7C,yBAAyB,EACzB,CAAC,GAAG,EAAE,EAAE,CACN,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAChD,4BAA4B,GAAG,GAAG,CACnC,CACJ,CAAC;IAEF,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,EAAE,CACV,uBAAuB,CACrB,sBAAsB,EACtB,4BAA4B,CAC7B,CACF,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,EAAE,CACV,uBAAuB,CACrB,uBAAuB,EACvB,iCAAiC,CAClC,CACF,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
* Attach MCP Appium to an existing remote Appium session without taking
|
|
3
3
|
* ownership of the underlying session lifecycle.
|
|
4
4
|
*
|
|
5
|
+
* Session capabilities are fetched from the server before creating the
|
|
6
|
+
* WebDriver client so that WebDriver.attachToSession receives the full
|
|
7
|
+
* capability set (including platformName) and sessionEnvironmentDetector can
|
|
8
|
+
* correctly configure isMobile / isAndroid / isIOS on the client instance.
|
|
9
|
+
*
|
|
5
10
|
* @param args - Remote server location, target session id, and optional
|
|
6
|
-
* capability overrides
|
|
7
|
-
* @returns A tool response describing whether the
|
|
11
|
+
* capability overrides.
|
|
12
|
+
* @returns A tool response describing whether the attachment succeeded.
|
|
8
13
|
*/
|
|
9
14
|
export declare function attachSessionAction(args: {
|
|
10
15
|
remoteServerUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"AA0CA
|
|
1
|
+
{"version":3,"file":"attach-session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,GAAG,CAAC,CA0Gf"}
|
|
@@ -2,7 +2,7 @@ import { detachSession, getSessionOwnership, listSessions, setSession, } from '.
|
|
|
2
2
|
import { readAllPersistedSessions } from '../../persistence.js';
|
|
3
3
|
import { errorResult, textResult, toolErrorMessage } from '../tool-response.js';
|
|
4
4
|
import { validateRemoteServerUrl } from './create-session.js';
|
|
5
|
-
import { attachToRemoteSession } from '../../utils/url.js';
|
|
5
|
+
import { attachToRemoteSession, getPortFromUrl } from '../../utils/url.js';
|
|
6
6
|
/**
|
|
7
7
|
* Normalize capability payloads returned by Appium/WebdriverIO into a flat
|
|
8
8
|
* capability record.
|
|
@@ -30,9 +30,14 @@ const METADATA_FIELDS = [
|
|
|
30
30
|
* Attach MCP Appium to an existing remote Appium session without taking
|
|
31
31
|
* ownership of the underlying session lifecycle.
|
|
32
32
|
*
|
|
33
|
+
* Session capabilities are fetched from the server before creating the
|
|
34
|
+
* WebDriver client so that WebDriver.attachToSession receives the full
|
|
35
|
+
* capability set (including platformName) and sessionEnvironmentDetector can
|
|
36
|
+
* correctly configure isMobile / isAndroid / isIOS on the client instance.
|
|
37
|
+
*
|
|
33
38
|
* @param args - Remote server location, target session id, and optional
|
|
34
|
-
* capability overrides
|
|
35
|
-
* @returns A tool response describing whether the
|
|
39
|
+
* capability overrides.
|
|
40
|
+
* @returns A tool response describing whether the attachment succeeded.
|
|
36
41
|
*/
|
|
37
42
|
export async function attachSessionAction(args) {
|
|
38
43
|
try {
|
|
@@ -44,21 +49,33 @@ export async function attachSessionAction(args) {
|
|
|
44
49
|
detachSession(args.sessionId);
|
|
45
50
|
}
|
|
46
51
|
validateRemoteServerUrl(args.remoteServerUrl, process.env.REMOTE_SERVER_URL_ALLOW_REGEX);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const [
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
// Fetch capabilities from the server BEFORE creating the WebDriver client.
|
|
53
|
+
// This ensures WebDriver.attachToSession receives platformName so that
|
|
54
|
+
// sessionEnvironmentDetector configures isMobile / isAndroid / isIOS
|
|
55
|
+
// correctly. Caller-provided capabilities take the lowest priority; the W3C
|
|
56
|
+
// Appium extension endpoint wins.
|
|
57
|
+
const [sessionCapabilities, deprecatedSessionCapabilities] = await Promise.all([
|
|
58
|
+
fetchCapabilitiesFromServer(args.remoteServerUrl, args.sessionId, 'appium/session_capabilities'),
|
|
59
|
+
fetchCapabilitiesFromServer(args.remoteServerUrl, args.sessionId),
|
|
55
60
|
]);
|
|
61
|
+
if (sessionCapabilities === undefined &&
|
|
62
|
+
deprecatedSessionCapabilities === undefined) {
|
|
63
|
+
return errorResult(`Failed to fetch capabilities for session ${args.sessionId} from ${args.remoteServerUrl}. ` +
|
|
64
|
+
`The server may be unreachable or the session may no longer exist.`);
|
|
65
|
+
}
|
|
56
66
|
const sources = [
|
|
57
|
-
appiumCapabilities,
|
|
58
67
|
sessionCapabilities,
|
|
68
|
+
deprecatedSessionCapabilities,
|
|
59
69
|
args.capabilities,
|
|
60
70
|
];
|
|
61
|
-
const capabilities = Object.assign({}, args.capabilities ?? {},
|
|
71
|
+
const capabilities = Object.assign({}, args.capabilities ?? {}, deprecatedSessionCapabilities ?? {}, sessionCapabilities ?? {});
|
|
72
|
+
const client = await attachToRemoteSession({
|
|
73
|
+
remoteServerUrl: args.remoteServerUrl,
|
|
74
|
+
sessionId: args.sessionId,
|
|
75
|
+
capabilities,
|
|
76
|
+
});
|
|
77
|
+
// Normalize metadata fields into their canonical prefixed forms for
|
|
78
|
+
// local session tracking.
|
|
62
79
|
for (const [plainKey, prefixedKey, targetKey] of METADATA_FIELDS) {
|
|
63
80
|
const source = sources.find((candidate) => candidate?.[plainKey] !== undefined ||
|
|
64
81
|
candidate?.[prefixedKey] !== undefined);
|
|
@@ -92,19 +109,40 @@ export async function attachSessionAction(args) {
|
|
|
92
109
|
}
|
|
93
110
|
}
|
|
94
111
|
/**
|
|
95
|
-
*
|
|
112
|
+
* Fetch session capabilities from the Appium server via a plain HTTP request.
|
|
96
113
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
114
|
+
* Making this request before WebDriver.attachToSession avoids the ordering
|
|
115
|
+
* problem where the client is created before platformName is known.
|
|
116
|
+
*
|
|
117
|
+
* @param remoteServerUrl - Base URL of the Appium server.
|
|
118
|
+
* @param sessionId - ID of the existing session to query.
|
|
119
|
+
* @param endpoint - Optional sub-path after `/session/{id}/`.
|
|
120
|
+
* @returns Parsed capabilities, or `undefined` when the request fails or the
|
|
121
|
+
* endpoint is not supported by the server.
|
|
100
122
|
*/
|
|
101
|
-
async function
|
|
102
|
-
const method = client[methodName];
|
|
103
|
-
if (typeof method !== 'function') {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
123
|
+
async function fetchCapabilitiesFromServer(remoteServerUrl, sessionId, endpoint) {
|
|
106
124
|
try {
|
|
107
|
-
|
|
125
|
+
const url = new URL(remoteServerUrl);
|
|
126
|
+
const port = getPortFromUrl(url);
|
|
127
|
+
const basePath = url.pathname.replace(/\/$/, '');
|
|
128
|
+
const path = `${basePath}/session/${sessionId}${endpoint ? '/' + endpoint : ''}`;
|
|
129
|
+
const requestUrl = `${url.protocol}//${url.hostname}:${port}${path}`;
|
|
130
|
+
const headers = {
|
|
131
|
+
'Content-Type': 'application/json',
|
|
132
|
+
};
|
|
133
|
+
if (url.username && url.password) {
|
|
134
|
+
const credentials = Buffer.from(`${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`).toString('base64');
|
|
135
|
+
headers.Authorization = `Basic ${credentials}`;
|
|
136
|
+
}
|
|
137
|
+
const response = await fetch(requestUrl, {
|
|
138
|
+
headers,
|
|
139
|
+
signal: AbortSignal.timeout(5000),
|
|
140
|
+
});
|
|
141
|
+
if (!response.ok) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
const json = (await response.json());
|
|
145
|
+
return readCapabilities(json.value);
|
|
108
146
|
}
|
|
109
147
|
catch {
|
|
110
148
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-session.js","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,UAAU,GAGX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"attach-session.js","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA8EvC,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6ErD"}
|
|
@@ -34,7 +34,7 @@ const schema = z.object({
|
|
|
34
34
|
.enum(SESSION_ACTIONS)
|
|
35
35
|
.describe('Action to perform. ' +
|
|
36
36
|
`create: ${CREATE_SESSION_DESCRIPTION}` +
|
|
37
|
-
'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId.' +
|
|
37
|
+
'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId. Always pass capabilities with at least platformName (e.g. \'{"platformName":"iOS"}\' or \'{"platformName":"Android"}\') so the client is configured with the correct protocol commands.' +
|
|
38
38
|
'detach: Remove an attached Appium session from MCP Appium without deleting the real remote session. Defaults to the active session.' +
|
|
39
39
|
'delete: Delete a mobile session and clean up resources. If sessionId is omitted, deletes the active session.' +
|
|
40
40
|
'list: List all active Appium sessions managed by this MCP server, including active flag, ownership, and current context.' +
|
|
@@ -50,9 +50,8 @@ const schema = z.object({
|
|
|
50
50
|
.string()
|
|
51
51
|
.optional()
|
|
52
52
|
.describe('Optional W3C capabilities for create. Provide as a JSON string (e.g. \'{"appium:app":"/path/to/app","appium:platformVersion":"17.0"}\'). ' +
|
|
53
|
-
'
|
|
54
|
-
'
|
|
55
|
-
'When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values.'),
|
|
53
|
+
'For create: applied on top of defaults for ios/android, or used as-is for general. Common: appium:app, appium:deviceName, appium:platformVersion, appium:bundleId. When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values. ' +
|
|
54
|
+
'For attach: always include platformName ("iOS" or "Android") so the WebDriver client loads the correct Appium protocol commands (e.g. \'{"platformName":"iOS"}\').'),
|
|
56
55
|
remoteServerUrl: z
|
|
57
56
|
.string()
|
|
58
57
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,MAAM,eAAe,GAAG;IACtB,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;CACA,CAAC;AAEX,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;iMAc8J,CAAC;AAElM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,eAAe,CAAC;SACrB,QAAQ,CACP,qBAAqB;QACnB,WAAW,0BAA0B,EAAE;QACvC,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/url.d.ts
CHANGED
package/dist/utils/url.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"name": "io.github.appium/appium-mcp",
|
|
4
4
|
"title": "MCP Appium - Mobile Development and Automation Server",
|
|
5
5
|
"description": "MCP server for Appium mobile automation on iOS and Android devices with test creation tools.",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.82.0",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "appium-mcp",
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.82.0",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
}
|
|
Binary file
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import { readAllPersistedSessions } from '../../persistence.js';
|
|
11
11
|
import { errorResult, textResult, toolErrorMessage } from '../tool-response.js';
|
|
12
12
|
import { validateRemoteServerUrl } from './create-session.js';
|
|
13
|
-
import { attachToRemoteSession } from '../../utils/url.js';
|
|
13
|
+
import { attachToRemoteSession, getPortFromUrl } from '../../utils/url.js';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Normalize capability payloads returned by Appium/WebdriverIO into a flat
|
|
@@ -44,9 +44,14 @@ const METADATA_FIELDS = [
|
|
|
44
44
|
* Attach MCP Appium to an existing remote Appium session without taking
|
|
45
45
|
* ownership of the underlying session lifecycle.
|
|
46
46
|
*
|
|
47
|
+
* Session capabilities are fetched from the server before creating the
|
|
48
|
+
* WebDriver client so that WebDriver.attachToSession receives the full
|
|
49
|
+
* capability set (including platformName) and sessionEnvironmentDetector can
|
|
50
|
+
* correctly configure isMobile / isAndroid / isIOS on the client instance.
|
|
51
|
+
*
|
|
47
52
|
* @param args - Remote server location, target session id, and optional
|
|
48
|
-
* capability overrides
|
|
49
|
-
* @returns A tool response describing whether the
|
|
53
|
+
* capability overrides.
|
|
54
|
+
* @returns A tool response describing whether the attachment succeeded.
|
|
50
55
|
*/
|
|
51
56
|
export async function attachSessionAction(args: {
|
|
52
57
|
remoteServerUrl: string;
|
|
@@ -69,29 +74,51 @@ export async function attachSessionAction(args: {
|
|
|
69
74
|
process.env.REMOTE_SERVER_URL_ALLOW_REGEX
|
|
70
75
|
);
|
|
71
76
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
// Fetch capabilities from the server BEFORE creating the WebDriver client.
|
|
78
|
+
// This ensures WebDriver.attachToSession receives platformName so that
|
|
79
|
+
// sessionEnvironmentDetector configures isMobile / isAndroid / isIOS
|
|
80
|
+
// correctly. Caller-provided capabilities take the lowest priority; the W3C
|
|
81
|
+
// Appium extension endpoint wins.
|
|
82
|
+
const [sessionCapabilities, deprecatedSessionCapabilities] =
|
|
83
|
+
await Promise.all([
|
|
84
|
+
fetchCapabilitiesFromServer(
|
|
85
|
+
args.remoteServerUrl,
|
|
86
|
+
args.sessionId,
|
|
87
|
+
'appium/session_capabilities'
|
|
88
|
+
),
|
|
89
|
+
fetchCapabilitiesFromServer(args.remoteServerUrl, args.sessionId),
|
|
90
|
+
]);
|
|
91
|
+
|
|
92
|
+
if (
|
|
93
|
+
sessionCapabilities === undefined &&
|
|
94
|
+
deprecatedSessionCapabilities === undefined
|
|
95
|
+
) {
|
|
96
|
+
return errorResult(
|
|
97
|
+
`Failed to fetch capabilities for session ${args.sessionId} from ${args.remoteServerUrl}. ` +
|
|
98
|
+
`The server may be unreachable or the session may no longer exist.`
|
|
99
|
+
);
|
|
100
|
+
}
|
|
82
101
|
|
|
83
102
|
const sources = [
|
|
84
|
-
appiumCapabilities,
|
|
85
103
|
sessionCapabilities,
|
|
104
|
+
deprecatedSessionCapabilities,
|
|
86
105
|
args.capabilities,
|
|
87
106
|
];
|
|
88
107
|
const capabilities: SessionCapabilities = Object.assign(
|
|
89
108
|
{},
|
|
90
109
|
args.capabilities ?? {},
|
|
91
|
-
|
|
92
|
-
|
|
110
|
+
deprecatedSessionCapabilities ?? {},
|
|
111
|
+
sessionCapabilities ?? {}
|
|
93
112
|
);
|
|
94
113
|
|
|
114
|
+
const client: Client = await attachToRemoteSession({
|
|
115
|
+
remoteServerUrl: args.remoteServerUrl,
|
|
116
|
+
sessionId: args.sessionId,
|
|
117
|
+
capabilities,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Normalize metadata fields into their canonical prefixed forms for
|
|
121
|
+
// local session tracking.
|
|
95
122
|
for (const [plainKey, prefixedKey, targetKey] of METADATA_FIELDS) {
|
|
96
123
|
const source = sources.find(
|
|
97
124
|
(candidate) =>
|
|
@@ -99,10 +126,8 @@ export async function attachSessionAction(args: {
|
|
|
99
126
|
candidate?.[prefixedKey] !== undefined
|
|
100
127
|
);
|
|
101
128
|
const value = source?.[plainKey] ?? source?.[prefixedKey];
|
|
102
|
-
|
|
103
129
|
delete capabilities[plainKey];
|
|
104
130
|
delete capabilities[prefixedKey];
|
|
105
|
-
|
|
106
131
|
if (value !== undefined) {
|
|
107
132
|
capabilities[targetKey] = value;
|
|
108
133
|
}
|
|
@@ -141,23 +166,49 @@ export async function attachSessionAction(args: {
|
|
|
141
166
|
}
|
|
142
167
|
|
|
143
168
|
/**
|
|
144
|
-
*
|
|
169
|
+
* Fetch session capabilities from the Appium server via a plain HTTP request.
|
|
145
170
|
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
171
|
+
* Making this request before WebDriver.attachToSession avoids the ordering
|
|
172
|
+
* problem where the client is created before platformName is known.
|
|
173
|
+
*
|
|
174
|
+
* @param remoteServerUrl - Base URL of the Appium server.
|
|
175
|
+
* @param sessionId - ID of the existing session to query.
|
|
176
|
+
* @param endpoint - Optional sub-path after `/session/{id}/`.
|
|
177
|
+
* @returns Parsed capabilities, or `undefined` when the request fails or the
|
|
178
|
+
* endpoint is not supported by the server.
|
|
149
179
|
*/
|
|
150
|
-
async function
|
|
151
|
-
|
|
152
|
-
|
|
180
|
+
async function fetchCapabilitiesFromServer(
|
|
181
|
+
remoteServerUrl: string,
|
|
182
|
+
sessionId: string,
|
|
183
|
+
endpoint?: string
|
|
153
184
|
): Promise<SessionCapabilities | undefined> {
|
|
154
|
-
const method = client[methodName];
|
|
155
|
-
if (typeof method !== 'function') {
|
|
156
|
-
return undefined;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
185
|
try {
|
|
160
|
-
|
|
186
|
+
const url = new URL(remoteServerUrl);
|
|
187
|
+
const port = getPortFromUrl(url);
|
|
188
|
+
const basePath = url.pathname.replace(/\/$/, '');
|
|
189
|
+
const path = `${basePath}/session/${sessionId}${endpoint ? '/' + endpoint : ''}`;
|
|
190
|
+
const requestUrl = `${url.protocol}//${url.hostname}:${port}${path}`;
|
|
191
|
+
|
|
192
|
+
const headers: Record<string, string> = {
|
|
193
|
+
'Content-Type': 'application/json',
|
|
194
|
+
};
|
|
195
|
+
if (url.username && url.password) {
|
|
196
|
+
const credentials = Buffer.from(
|
|
197
|
+
`${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`
|
|
198
|
+
).toString('base64');
|
|
199
|
+
headers.Authorization = `Basic ${credentials}`;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const response = await fetch(requestUrl, {
|
|
203
|
+
headers,
|
|
204
|
+
signal: AbortSignal.timeout(5000),
|
|
205
|
+
});
|
|
206
|
+
if (!response.ok) {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const json = (await response.json()) as { value?: unknown };
|
|
211
|
+
return readCapabilities(json.value);
|
|
161
212
|
} catch {
|
|
162
213
|
return undefined;
|
|
163
214
|
}
|
|
@@ -39,7 +39,7 @@ const schema = z.object({
|
|
|
39
39
|
.describe(
|
|
40
40
|
'Action to perform. ' +
|
|
41
41
|
`create: ${CREATE_SESSION_DESCRIPTION}` +
|
|
42
|
-
'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId.' +
|
|
42
|
+
'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId. Always pass capabilities with at least platformName (e.g. \'{"platformName":"iOS"}\' or \'{"platformName":"Android"}\') so the client is configured with the correct protocol commands.' +
|
|
43
43
|
'detach: Remove an attached Appium session from MCP Appium without deleting the real remote session. Defaults to the active session.' +
|
|
44
44
|
'delete: Delete a mobile session and clean up resources. If sessionId is omitted, deletes the active session.' +
|
|
45
45
|
'list: List all active Appium sessions managed by this MCP server, including active flag, ownership, and current context.' +
|
|
@@ -59,9 +59,8 @@ const schema = z.object({
|
|
|
59
59
|
.optional()
|
|
60
60
|
.describe(
|
|
61
61
|
'Optional W3C capabilities for create. Provide as a JSON string (e.g. \'{"appium:app":"/path/to/app","appium:platformVersion":"17.0"}\'). ' +
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values.'
|
|
62
|
+
'For create: applied on top of defaults for ios/android, or used as-is for general. Common: appium:app, appium:deviceName, appium:platformVersion, appium:bundleId. When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values. ' +
|
|
63
|
+
'For attach: always include platformName ("iOS" or "Android") so the WebDriver client loads the correct Appium protocol commands (e.g. \'{"platformName":"iOS"}\').'
|
|
65
64
|
),
|
|
66
65
|
remoteServerUrl: z
|
|
67
66
|
.string()
|
package/src/utils/url.ts
CHANGED