appium-mcp 1.86.10 → 1.86.11

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 CHANGED
@@ -1,3 +1,5 @@
1
+ ## [1.86.11](https://github.com/appium/appium-mcp/compare/v1.86.10...v1.86.11) (2026-07-01)
2
+
1
3
  ## [1.86.10](https://github.com/appium/appium-mcp/compare/v1.86.9...v1.86.10) (2026-07-01)
2
4
 
3
5
  ## [1.86.9](https://github.com/appium/appium-mcp/compare/v1.86.8...v1.86.9) (2026-06-30)
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # MCP Appium - MCP server for Mobile Development and Automation | iOS, Android, Simulator, Emulator, and Real Devices
2
2
 
3
+ [![npm version](http://img.shields.io/npm/v/appium-mcp.svg)](https://npmjs.org/package/appium-mcp)
4
+
3
5
  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
4
6
 
5
7
  MCP Appium is an intelligent MCP (Model Context Protocol) server designed to empower AI assistants with a robust suite of tools for mobile automation. It streamlines mobile app testing by enabling natural language interactions, intelligent locator generation, and automated test creation for both Android and iOS platforms.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-ui-utils.d.ts","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,WAAW,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CASA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,EACF,QAAQ,EAAE,SAAS,GAAG,KAAK,EAC3B,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,GAChC,MAAM,CA+LR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,CAwMR;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE;IACpD,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAiPT;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,GACD,MAAM,CAmMR;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0KtE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAsJR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CAgNR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAe,GACxB,MAAM,CAsJR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EAC7D,UAAU,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAC9C;IAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CAAE,CAQzB"}
1
+ {"version":3,"file":"mcp-ui-utils.d.ts","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,WAAW,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CASA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,EACF,QAAQ,EAAE,SAAS,GAAG,KAAK,EAC3B,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,GAChC,MAAM,CA+LR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,CAwMR;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE;IACpD,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAiPT;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,GACD,MAAM,CAmMR;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmMtE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAgKR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CAgNR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAe,GACxB,MAAM,CAyJR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EAC7D,UAAU,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAC9C;IAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CAAE,CAQzB"}
@@ -862,13 +862,7 @@ export function createLocatorGeneratorUI(locators) {
862
862
  * @returns HTML string for page source inspector
863
863
  */
864
864
  export function createPageSourceInspectorUI(pageSource) {
865
- // Escape HTML for safe display
866
- const escapedSource = pageSource
867
- .replace(/&/g, '&')
868
- .replace(/</g, '&lt;')
869
- .replace(/>/g, '&gt;')
870
- .replace(/"/g, '&quot;')
871
- .replace(/'/g, '&#039;');
865
+ const escapedSource = escapeHtml(pageSource);
872
866
  return `
873
867
  <!DOCTYPE html>
874
868
  <html lang="en">
@@ -1012,19 +1006,50 @@ export function createPageSourceInspectorUI(pageSource) {
1012
1006
  }, '*');
1013
1007
  }
1014
1008
 
1015
- // Search functionality
1016
- document.getElementById('searchBox').addEventListener('input', (e) => {
1017
- const searchTerm = e.target.value.toLowerCase();
1018
- const content = document.getElementById('xmlContent');
1009
+ const xmlContent = document.getElementById('xmlContent');
1010
+ const originalSource = xmlContent.textContent;
1011
+
1012
+ function appendTextWithHighlights(container, text, searchTerm) {
1013
+ const searchLower = searchTerm.toLowerCase();
1014
+ const textLower = text.toLowerCase();
1015
+ let position = 0;
1016
+
1017
+ while (position < text.length) {
1018
+ const matchIndex = textLower.indexOf(searchLower, position);
1019
+ if (matchIndex === -1) {
1020
+ container.appendChild(document.createTextNode(text.slice(position)));
1021
+ return;
1022
+ }
1023
+
1024
+ if (matchIndex > position) {
1025
+ container.appendChild(
1026
+ document.createTextNode(text.slice(position, matchIndex))
1027
+ );
1028
+ }
1029
+
1030
+ const mark = document.createElement('mark');
1031
+ mark.style.background = '#ffd700';
1032
+ mark.style.color = '#000';
1033
+ mark.textContent = text.slice(matchIndex, matchIndex + searchTerm.length);
1034
+ container.appendChild(mark);
1035
+ position = matchIndex + searchTerm.length;
1036
+ }
1037
+ }
1038
+
1039
+ function renderSource(searchTerm = '') {
1040
+ xmlContent.textContent = '';
1019
1041
  if (!searchTerm) {
1020
- content.innerHTML = \`${escapedSource}\`;
1042
+ xmlContent.textContent = originalSource;
1021
1043
  return;
1022
1044
  }
1023
- const highlighted = content.textContent.replace(
1024
- new RegExp(\`(\${searchTerm})\`, 'gi'),
1025
- '<mark style="background: #ffd700; color: #000;">$1</mark>'
1026
- );
1027
- content.innerHTML = highlighted;
1045
+
1046
+ appendTextWithHighlights(xmlContent, originalSource, searchTerm);
1047
+ }
1048
+
1049
+ // Search functionality
1050
+ document.getElementById('searchBox').addEventListener('input', (e) => {
1051
+ const searchTerm = e.target.value.toLowerCase();
1052
+ renderSource(searchTerm);
1028
1053
  });
1029
1054
  </script>
1030
1055
  </body>
@@ -1041,15 +1066,15 @@ export function createContextSwitcherUI(contexts, currentContext) {
1041
1066
  const contextCards = contexts
1042
1067
  .map((context) => `
1043
1068
  <div class="context-card ${context === currentContext ? 'active' : ''}"
1044
- onclick="switchContext('${context}')">
1069
+ data-context="${escapeHtml(context)}">
1045
1070
  <div class="context-header">
1046
- <h3>${context}</h3>
1071
+ <h3>${escapeHtml(context)}</h3>
1047
1072
  ${context === currentContext ? '<span class="badge-active">Active</span>' : ''}
1048
1073
  </div>
1049
1074
  <div class="context-type">
1050
1075
  ${context === 'NATIVE_APP' ? '📱 Native App' : '🌐 WebView'}
1051
1076
  </div>
1052
- <button class="switch-btn" onclick="event.stopPropagation(); switchContext('${context}')">
1077
+ <button class="switch-btn">
1053
1078
  ${context === currentContext ? 'Current' : 'Switch'}
1054
1079
  </button>
1055
1080
  </div>
@@ -1180,6 +1205,16 @@ export function createContextSwitcherUI(contexts, currentContext) {
1180
1205
  }
1181
1206
  }, '*');
1182
1207
  }
1208
+
1209
+ document.addEventListener('click', (event) => {
1210
+ const target = event.target;
1211
+ const card = target instanceof Element ? target.closest('.context-card') : null;
1212
+ if (!card) {
1213
+ return;
1214
+ }
1215
+
1216
+ switchContext(card.dataset.context || '');
1217
+ });
1183
1218
  </script>
1184
1219
  </body>
1185
1220
  </html>
@@ -1403,13 +1438,9 @@ export function createAppListUI(apps) {
1403
1438
  * @returns HTML string for test code viewer
1404
1439
  */
1405
1440
  export function createTestCodeViewerUI(code, language = 'java') {
1406
- // Escape HTML for safe display
1407
- const escapedCode = code
1408
- .replace(/&/g, '&amp;')
1409
- .replace(/</g, '&lt;')
1410
- .replace(/>/g, '&gt;')
1411
- .replace(/"/g, '&quot;')
1412
- .replace(/'/g, '&#039;');
1441
+ const escapedCode = escapeHtml(code);
1442
+ const languageLabel = escapeHtml(language);
1443
+ const downloadExtension = language === 'java' ? 'java' : 'js';
1413
1444
  return `
1414
1445
  <!DOCTYPE html>
1415
1446
  <html lang="en">
@@ -1502,7 +1533,7 @@ export function createTestCodeViewerUI(code, language = 'java') {
1502
1533
  <div class="toolbar">
1503
1534
  <div class="toolbar-left">
1504
1535
  <span style="font-size: 14px; font-weight: 500;">💻 Test Code Viewer</span>
1505
- <span class="language-badge">${language}</span>
1536
+ <span class="language-badge">${languageLabel}</span>
1506
1537
  <span style="font-size: 12px; color: #999;">${code.length} characters, ${code.split('\\n').length} lines</span>
1507
1538
  </div>
1508
1539
  <div class="toolbar-right">
@@ -1528,21 +1559,28 @@ export function createTestCodeViewerUI(code, language = 'java') {
1528
1559
  const url = URL.createObjectURL(blob);
1529
1560
  const a = document.createElement('a');
1530
1561
  a.href = url;
1531
- a.download = 'TestCode.${language === 'java' ? 'java' : 'js'}';
1562
+ a.download = 'TestCode.${downloadExtension}';
1532
1563
  a.click();
1533
1564
  URL.revokeObjectURL(url);
1534
1565
  }
1535
1566
 
1536
1567
  function formatCode() {
1537
- // Basic formatting - could be enhanced with a proper formatter
1538
1568
  const content = document.getElementById('codeContent');
1539
1569
  const text = content.textContent;
1540
- // Add line numbers
1541
1570
  const lines = text.split('\\n');
1542
- const formatted = lines.map((line, i) =>
1543
- \`<span class="line-numbers">\${i + 1}</span>\${line}\`
1544
- ).join('\\n');
1545
- content.innerHTML = formatted;
1571
+ content.textContent = '';
1572
+
1573
+ lines.forEach((line, index) => {
1574
+ if (index > 0) {
1575
+ content.appendChild(document.createTextNode('\\n'));
1576
+ }
1577
+
1578
+ const lineNumber = document.createElement('span');
1579
+ lineNumber.className = 'line-numbers';
1580
+ lineNumber.textContent = String(index + 1);
1581
+ content.appendChild(lineNumber);
1582
+ content.appendChild(document.createTextNode(line));
1583
+ });
1546
1584
  }
1547
1585
 
1548
1586
  // Initial format
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-ui-utils.js","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-ui-utils.js","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "appium-mcp",
3
3
  "mcpName": "io.github.appium/appium-mcp",
4
- "version": "1.86.10",
4
+ "version": "1.86.11",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
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.86.10",
6
+ "version": "1.86.11",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "appium-mcp",
11
- "version": "1.86.10",
11
+ "version": "1.86.11",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }
@@ -928,13 +928,7 @@ export function createLocatorGeneratorUI(
928
928
  * @returns HTML string for page source inspector
929
929
  */
930
930
  export function createPageSourceInspectorUI(pageSource: string): string {
931
- // Escape HTML for safe display
932
- const escapedSource = pageSource
933
- .replace(/&/g, '&amp;')
934
- .replace(/</g, '&lt;')
935
- .replace(/>/g, '&gt;')
936
- .replace(/"/g, '&quot;')
937
- .replace(/'/g, '&#039;');
931
+ const escapedSource = escapeHtml(pageSource);
938
932
 
939
933
  return `
940
934
  <!DOCTYPE html>
@@ -1079,19 +1073,50 @@ export function createPageSourceInspectorUI(pageSource: string): string {
1079
1073
  }, '*');
1080
1074
  }
1081
1075
 
1082
- // Search functionality
1083
- document.getElementById('searchBox').addEventListener('input', (e) => {
1084
- const searchTerm = e.target.value.toLowerCase();
1085
- const content = document.getElementById('xmlContent');
1076
+ const xmlContent = document.getElementById('xmlContent');
1077
+ const originalSource = xmlContent.textContent;
1078
+
1079
+ function appendTextWithHighlights(container, text, searchTerm) {
1080
+ const searchLower = searchTerm.toLowerCase();
1081
+ const textLower = text.toLowerCase();
1082
+ let position = 0;
1083
+
1084
+ while (position < text.length) {
1085
+ const matchIndex = textLower.indexOf(searchLower, position);
1086
+ if (matchIndex === -1) {
1087
+ container.appendChild(document.createTextNode(text.slice(position)));
1088
+ return;
1089
+ }
1090
+
1091
+ if (matchIndex > position) {
1092
+ container.appendChild(
1093
+ document.createTextNode(text.slice(position, matchIndex))
1094
+ );
1095
+ }
1096
+
1097
+ const mark = document.createElement('mark');
1098
+ mark.style.background = '#ffd700';
1099
+ mark.style.color = '#000';
1100
+ mark.textContent = text.slice(matchIndex, matchIndex + searchTerm.length);
1101
+ container.appendChild(mark);
1102
+ position = matchIndex + searchTerm.length;
1103
+ }
1104
+ }
1105
+
1106
+ function renderSource(searchTerm = '') {
1107
+ xmlContent.textContent = '';
1086
1108
  if (!searchTerm) {
1087
- content.innerHTML = \`${escapedSource}\`;
1109
+ xmlContent.textContent = originalSource;
1088
1110
  return;
1089
1111
  }
1090
- const highlighted = content.textContent.replace(
1091
- new RegExp(\`(\${searchTerm})\`, 'gi'),
1092
- '<mark style="background: #ffd700; color: #000;">$1</mark>'
1093
- );
1094
- content.innerHTML = highlighted;
1112
+
1113
+ appendTextWithHighlights(xmlContent, originalSource, searchTerm);
1114
+ }
1115
+
1116
+ // Search functionality
1117
+ document.getElementById('searchBox').addEventListener('input', (e) => {
1118
+ const searchTerm = e.target.value.toLowerCase();
1119
+ renderSource(searchTerm);
1095
1120
  });
1096
1121
  </script>
1097
1122
  </body>
@@ -1113,15 +1138,15 @@ export function createContextSwitcherUI(
1113
1138
  .map(
1114
1139
  (context) => `
1115
1140
  <div class="context-card ${context === currentContext ? 'active' : ''}"
1116
- onclick="switchContext('${context}')">
1141
+ data-context="${escapeHtml(context)}">
1117
1142
  <div class="context-header">
1118
- <h3>${context}</h3>
1143
+ <h3>${escapeHtml(context)}</h3>
1119
1144
  ${context === currentContext ? '<span class="badge-active">Active</span>' : ''}
1120
1145
  </div>
1121
1146
  <div class="context-type">
1122
1147
  ${context === 'NATIVE_APP' ? '📱 Native App' : '🌐 WebView'}
1123
1148
  </div>
1124
- <button class="switch-btn" onclick="event.stopPropagation(); switchContext('${context}')">
1149
+ <button class="switch-btn">
1125
1150
  ${context === currentContext ? 'Current' : 'Switch'}
1126
1151
  </button>
1127
1152
  </div>
@@ -1254,6 +1279,16 @@ export function createContextSwitcherUI(
1254
1279
  }
1255
1280
  }, '*');
1256
1281
  }
1282
+
1283
+ document.addEventListener('click', (event) => {
1284
+ const target = event.target;
1285
+ const card = target instanceof Element ? target.closest('.context-card') : null;
1286
+ if (!card) {
1287
+ return;
1288
+ }
1289
+
1290
+ switchContext(card.dataset.context || '');
1291
+ });
1257
1292
  </script>
1258
1293
  </body>
1259
1294
  </html>
@@ -1487,13 +1522,9 @@ export function createTestCodeViewerUI(
1487
1522
  code: string,
1488
1523
  language: string = 'java'
1489
1524
  ): string {
1490
- // Escape HTML for safe display
1491
- const escapedCode = code
1492
- .replace(/&/g, '&amp;')
1493
- .replace(/</g, '&lt;')
1494
- .replace(/>/g, '&gt;')
1495
- .replace(/"/g, '&quot;')
1496
- .replace(/'/g, '&#039;');
1525
+ const escapedCode = escapeHtml(code);
1526
+ const languageLabel = escapeHtml(language);
1527
+ const downloadExtension = language === 'java' ? 'java' : 'js';
1497
1528
 
1498
1529
  return `
1499
1530
  <!DOCTYPE html>
@@ -1587,7 +1618,7 @@ export function createTestCodeViewerUI(
1587
1618
  <div class="toolbar">
1588
1619
  <div class="toolbar-left">
1589
1620
  <span style="font-size: 14px; font-weight: 500;">💻 Test Code Viewer</span>
1590
- <span class="language-badge">${language}</span>
1621
+ <span class="language-badge">${languageLabel}</span>
1591
1622
  <span style="font-size: 12px; color: #999;">${code.length} characters, ${code.split('\\n').length} lines</span>
1592
1623
  </div>
1593
1624
  <div class="toolbar-right">
@@ -1613,21 +1644,28 @@ export function createTestCodeViewerUI(
1613
1644
  const url = URL.createObjectURL(blob);
1614
1645
  const a = document.createElement('a');
1615
1646
  a.href = url;
1616
- a.download = 'TestCode.${language === 'java' ? 'java' : 'js'}';
1647
+ a.download = 'TestCode.${downloadExtension}';
1617
1648
  a.click();
1618
1649
  URL.revokeObjectURL(url);
1619
1650
  }
1620
1651
 
1621
1652
  function formatCode() {
1622
- // Basic formatting - could be enhanced with a proper formatter
1623
1653
  const content = document.getElementById('codeContent');
1624
1654
  const text = content.textContent;
1625
- // Add line numbers
1626
1655
  const lines = text.split('\\n');
1627
- const formatted = lines.map((line, i) =>
1628
- \`<span class="line-numbers">\${i + 1}</span>\${line}\`
1629
- ).join('\\n');
1630
- content.innerHTML = formatted;
1656
+ content.textContent = '';
1657
+
1658
+ lines.forEach((line, index) => {
1659
+ if (index > 0) {
1660
+ content.appendChild(document.createTextNode('\\n'));
1661
+ }
1662
+
1663
+ const lineNumber = document.createElement('span');
1664
+ lineNumber.className = 'line-numbers';
1665
+ lineNumber.textContent = String(index + 1);
1666
+ content.appendChild(lineNumber);
1667
+ content.appendChild(document.createTextNode(line));
1668
+ });
1631
1669
  }
1632
1670
 
1633
1671
  // Initial format