appium-mcp 1.72.15 → 1.73.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.
Files changed (28) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/scripts/eval-documentation-rag.d.ts +23 -0
  3. package/dist/scripts/eval-documentation-rag.d.ts.map +1 -0
  4. package/dist/scripts/eval-documentation-rag.js +212 -0
  5. package/dist/scripts/eval-documentation-rag.js.map +1 -0
  6. package/dist/scripts/rag-eval-dataset.json +218 -0
  7. package/dist/tools/ai/handlers/find-element.d.ts.map +1 -1
  8. package/dist/tools/ai/handlers/find-element.js +5 -6
  9. package/dist/tools/ai/handlers/find-element.js.map +1 -1
  10. package/dist/tools/ai/schema.d.ts.map +1 -1
  11. package/dist/tools/ai/schema.js +14 -1
  12. package/dist/tools/ai/schema.js.map +1 -1
  13. package/dist/tools/documentation/sentence-transformers-embeddings.d.ts +4 -1
  14. package/dist/tools/documentation/sentence-transformers-embeddings.d.ts.map +1 -1
  15. package/dist/tools/documentation/sentence-transformers-embeddings.js +10 -3
  16. package/dist/tools/documentation/sentence-transformers-embeddings.js.map +1 -1
  17. package/dist/tools/documentation/simple-pdf-indexer.d.ts.map +1 -1
  18. package/dist/tools/documentation/simple-pdf-indexer.js +11 -2
  19. package/dist/tools/documentation/simple-pdf-indexer.js.map +1 -1
  20. package/package.json +4 -2
  21. package/server.json +2 -2
  22. package/src/resources/submodules.zip +0 -0
  23. package/src/scripts/eval-documentation-rag.ts +312 -0
  24. package/src/scripts/rag-eval-dataset.json +218 -0
  25. package/src/tools/ai/handlers/find-element.ts +6 -10
  26. package/src/tools/ai/schema.ts +35 -21
  27. package/src/tools/documentation/sentence-transformers-embeddings.ts +11 -4
  28. package/src/tools/documentation/simple-pdf-indexer.ts +11 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.73.0](https://github.com/appium/appium-mcp/compare/v1.72.16...v1.73.0) (2026-05-14)
2
+
3
+ ### Features
4
+
5
+ * **rag:** upgrade to BGE-small-v1.5 + add retrieval eval harness ([#334](https://github.com/appium/appium-mcp/issues/334)) ([bcfe254](https://github.com/appium/appium-mcp/commit/bcfe2542e2f270d0a2fe314c64e7c54e752933ff))
6
+
7
+ ## [1.72.16](https://github.com/appium/appium-mcp/compare/v1.72.15...v1.72.16) (2026-05-14)
8
+
9
+ ### Bug Fixes
10
+
11
+ * **ai:** enforce find_element instruction via Zod schema ([#329](https://github.com/appium/appium-mcp/issues/329)) ([a3bfe83](https://github.com/appium/appium-mcp/commit/a3bfe83576c6be9ec1ffa9371ab67b44cc86cc80))
12
+
1
13
  ## [1.72.15](https://github.com/appium/appium-mcp/compare/v1.72.14...v1.72.15) (2026-05-14)
2
14
 
3
15
  ### Bug Fixes
@@ -0,0 +1,23 @@
1
+ /**
2
+ * RAG retrieval eval harness for the Appium documentation tool.
3
+ *
4
+ * Usage (after `npm run build`):
5
+ * node dist/scripts/eval-documentation-rag.js [--quiet] [--save] [--top-chunks=N]
6
+ *
7
+ * What it does:
8
+ * 1. Loads the eval dataset (src/scripts/rag-eval-dataset.json).
9
+ * 2. For each query, calls the existing queryVectorStore() with `topChunks`
10
+ * chunks (default 30), dedupes by source (preserving rank), and matches
11
+ * the resulting source list against expectedSources.
12
+ * 3. Reports Recall@{1,3,5,10} and MRR, broken down by difficulty.
13
+ * 4. Persists results to src/scripts/eval-results/<ISO>.json plus a
14
+ * `latest.json` so successive runs can be diffed.
15
+ *
16
+ * Notes:
17
+ * - The first run after a server restart pays the embedding cold start
18
+ * (~30-60s for the current corpus).
19
+ * - Match strategy: a retrieved source matches an expected source if its
20
+ * `relativePath` ends with the expected path (case-sensitive).
21
+ */
22
+ export {};
23
+ //# sourceMappingURL=eval-documentation-rag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-documentation-rag.d.ts","sourceRoot":"","sources":["../../src/scripts/eval-documentation-rag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * RAG retrieval eval harness for the Appium documentation tool.
3
+ *
4
+ * Usage (after `npm run build`):
5
+ * node dist/scripts/eval-documentation-rag.js [--quiet] [--save] [--top-chunks=N]
6
+ *
7
+ * What it does:
8
+ * 1. Loads the eval dataset (src/scripts/rag-eval-dataset.json).
9
+ * 2. For each query, calls the existing queryVectorStore() with `topChunks`
10
+ * chunks (default 30), dedupes by source (preserving rank), and matches
11
+ * the resulting source list against expectedSources.
12
+ * 3. Reports Recall@{1,3,5,10} and MRR, broken down by difficulty.
13
+ * 4. Persists results to src/scripts/eval-results/<ISO>.json plus a
14
+ * `latest.json` so successive runs can be diffed.
15
+ *
16
+ * Notes:
17
+ * - The first run after a server restart pays the embedding cold start
18
+ * (~30-60s for the current corpus).
19
+ * - Match strategy: a retrieved source matches an expected source if its
20
+ * `relativePath` ends with the expected path (case-sensitive).
21
+ */
22
+ import * as fs from 'node:fs';
23
+ import * as path from 'node:path';
24
+ import { fileURLToPath } from 'node:url';
25
+ import { queryVectorStore } from '../tools/documentation/simple-pdf-indexer.js';
26
+ const __filename = fileURLToPath(import.meta.url);
27
+ const __dirname = path.dirname(__filename);
28
+ const args = new Set(process.argv.slice(2));
29
+ const QUIET = args.has('--quiet');
30
+ const NO_SAVE = !args.has('--save');
31
+ const topChunksArg = process.argv.find((a) => a.startsWith('--top-chunks='));
32
+ const TOP_CHUNKS = topChunksArg ? Number(topChunksArg.split('=')[1]) : 30;
33
+ function resolveDatasetPath() {
34
+ // When compiled, this file lives in dist/scripts/. We look for the dataset
35
+ // beside it first (copy-docs build step), then fall back to src/scripts/.
36
+ const candidates = [
37
+ path.resolve(__dirname, 'rag-eval-dataset.json'),
38
+ path.resolve(__dirname, '../../src/scripts/rag-eval-dataset.json'),
39
+ ];
40
+ for (const p of candidates) {
41
+ if (fs.existsSync(p)) {
42
+ return p;
43
+ }
44
+ }
45
+ throw new Error(`Could not find rag-eval-dataset.json in any of: ${candidates.join(', ')}`);
46
+ }
47
+ function resolveResultsDir() {
48
+ // Always write results into the source tree so they're easy to diff/commit.
49
+ const candidates = [
50
+ path.resolve(__dirname, '../../src/scripts/eval-results'),
51
+ path.resolve(__dirname, 'eval-results'),
52
+ ];
53
+ const dir = candidates[0];
54
+ fs.mkdirSync(dir, { recursive: true });
55
+ return dir;
56
+ }
57
+ function matches(retrievedRelPath, expected) {
58
+ return retrievedRelPath === expected || retrievedRelPath.endsWith(expected);
59
+ }
60
+ function dedupeBySource(chunks) {
61
+ const seen = new Set();
62
+ const ordered = [];
63
+ for (const c of chunks) {
64
+ const src = c.relativePath;
65
+ if (!src || seen.has(src)) {
66
+ continue;
67
+ }
68
+ seen.add(src);
69
+ ordered.push(src);
70
+ }
71
+ return ordered;
72
+ }
73
+ function evalQuery(retrievedSources, expectedSources) {
74
+ for (let i = 0; i < retrievedSources.length; i++) {
75
+ const hit = expectedSources.find((e) => matches(retrievedSources[i], e));
76
+ if (hit) {
77
+ return { matchedAtRank: i + 1, matchedSource: retrievedSources[i] };
78
+ }
79
+ }
80
+ return { matchedAtRank: null, matchedSource: null };
81
+ }
82
+ function aggregate(results) {
83
+ if (results.length === 0) {
84
+ return {
85
+ count: 0,
86
+ recallAt1: 0,
87
+ recallAt3: 0,
88
+ recallAt5: 0,
89
+ recallAt10: 0,
90
+ mrr: 0,
91
+ };
92
+ }
93
+ const n = results.length;
94
+ const sum = (k) => results.reduce((acc, r) => acc + r[k], 0);
95
+ return {
96
+ count: n,
97
+ recallAt1: sum('recallAt1') / n,
98
+ recallAt3: sum('recallAt3') / n,
99
+ recallAt5: sum('recallAt5') / n,
100
+ recallAt10: sum('recallAt10') / n,
101
+ mrr: sum('reciprocalRank') / n,
102
+ };
103
+ }
104
+ function fmt(n) {
105
+ return n.toFixed(3);
106
+ }
107
+ function rankStr(rank) {
108
+ return rank === null ? ' - ' : String(rank).padStart(3, ' ');
109
+ }
110
+ function printPerQueryTable(results) {
111
+ const rows = results.map((r) => ({
112
+ id: r.id,
113
+ diff: r.difficulty,
114
+ rank: rankStr(r.matchedAtRank),
115
+ query: r.query.length > 56 ? r.query.slice(0, 53) + '...' : r.query,
116
+ matched: r.matchedSource ?? '(none of expected found in top results)',
117
+ }));
118
+ const widths = {
119
+ id: 4,
120
+ diff: 7,
121
+ rank: 4,
122
+ query: Math.max(...rows.map((r) => r.query.length), 5),
123
+ matched: Math.max(...rows.map((r) => r.matched.length), 7),
124
+ };
125
+ const header = `${'id'.padEnd(widths.id)} | ${'diff'.padEnd(widths.diff)} | ${'rank'.padStart(widths.rank)} | ${'query'.padEnd(widths.query)} | matched`;
126
+ const sep = '-'.repeat(header.length + 10);
127
+ console.log(sep);
128
+ console.log(header);
129
+ console.log(sep);
130
+ for (const r of rows) {
131
+ console.log(`${r.id.padEnd(widths.id)} | ${r.diff.padEnd(widths.diff)} | ${r.rank.padStart(widths.rank)} | ${r.query.padEnd(widths.query)} | ${r.matched}`);
132
+ }
133
+ console.log(sep);
134
+ }
135
+ function printAggregate(label, m) {
136
+ const tag = `${label} (n=${m.count})`.padEnd(20);
137
+ console.log(`${tag} R@1=${fmt(m.recallAt1)} R@3=${fmt(m.recallAt3)} R@5=${fmt(m.recallAt5)} R@10=${fmt(m.recallAt10)} MRR=${fmt(m.mrr)}`);
138
+ }
139
+ async function runEval() {
140
+ const datasetPath = resolveDatasetPath();
141
+ const dataset = JSON.parse(fs.readFileSync(datasetPath, 'utf-8'));
142
+ if (!QUIET) {
143
+ console.log(`\n=== Appium RAG eval ===`);
144
+ console.log(`Dataset: ${datasetPath}`);
145
+ console.log(`Queries: ${dataset.queries.length} | topChunks: ${TOP_CHUNKS} | match: endsWith\n`);
146
+ }
147
+ const perQuery = [];
148
+ for (const q of dataset.queries) {
149
+ const docs = await queryVectorStore(q.query, TOP_CHUNKS);
150
+ const retrievedSources = dedupeBySource(docs.map((d) => ({
151
+ relativePath: d.metadata?.relativePath ??
152
+ d.metadata?.filename ??
153
+ d.metadata?.source,
154
+ })));
155
+ const { matchedAtRank, matchedSource } = evalQuery(retrievedSources, q.expectedSources);
156
+ perQuery.push({
157
+ id: q.id,
158
+ query: q.query,
159
+ difficulty: q.difficulty,
160
+ category: q.category,
161
+ expectedSources: q.expectedSources,
162
+ retrievedSources,
163
+ matchedAtRank,
164
+ matchedSource,
165
+ recallAt1: matchedAtRank !== null && matchedAtRank <= 1 ? 1 : 0,
166
+ recallAt3: matchedAtRank !== null && matchedAtRank <= 3 ? 1 : 0,
167
+ recallAt5: matchedAtRank !== null && matchedAtRank <= 5 ? 1 : 0,
168
+ recallAt10: matchedAtRank !== null && matchedAtRank <= 10 ? 1 : 0,
169
+ reciprocalRank: matchedAtRank !== null ? 1 / matchedAtRank : 0,
170
+ });
171
+ }
172
+ if (!QUIET) {
173
+ printPerQueryTable(perQuery);
174
+ }
175
+ const overall = aggregate(perQuery);
176
+ const byDifficulty = {};
177
+ for (const d of ['easy', 'medium', 'vague']) {
178
+ byDifficulty[d] = aggregate(perQuery.filter((r) => r.difficulty === d));
179
+ }
180
+ console.log('');
181
+ printAggregate('overall', overall);
182
+ for (const d of ['easy', 'medium', 'vague']) {
183
+ printAggregate(d, byDifficulty[d]);
184
+ }
185
+ console.log('');
186
+ if (!NO_SAVE) {
187
+ const run = {
188
+ timestamp: new Date().toISOString(),
189
+ datasetVersion: dataset.version,
190
+ topChunks: TOP_CHUNKS,
191
+ overall,
192
+ byDifficulty,
193
+ perQuery,
194
+ };
195
+ const dir = resolveResultsDir();
196
+ const stamp = run.timestamp.replace(/[:.]/g, '-');
197
+ const outPath = path.join(dir, `${stamp}.json`);
198
+ const latestPath = path.join(dir, 'latest.json');
199
+ fs.writeFileSync(outPath, JSON.stringify(run, null, 2));
200
+ fs.writeFileSync(latestPath, JSON.stringify(run, null, 2));
201
+ console.log(`Saved: ${path.relative(process.cwd(), outPath)}`);
202
+ console.log(` ${path.relative(process.cwd(), latestPath)}\n`);
203
+ }
204
+ }
205
+ try {
206
+ await runEval();
207
+ }
208
+ catch (err) {
209
+ console.error('Eval failed:', err);
210
+ process.exit(1);
211
+ }
212
+ //# sourceMappingURL=eval-documentation-rag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-documentation-rag.js","sourceRoot":"","sources":["../../src/scripts/eval-documentation-rag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ {
2
+ "version": 1,
3
+ "description": "Realistic user queries for the Appium documentation RAG tool. Each query maps to one or more source files that should appear in the retrieved sources (substring match against the chunk's relativePath metadata). Difficulty buckets: easy (specific terms that should be near-trivial to retrieve), medium (real-world phrasing), vague (natural human phrasing with less direct cues).",
4
+ "matchMode": "endsWith",
5
+ "queries": [
6
+ {
7
+ "id": "q01",
8
+ "query": "How do I install Appium?",
9
+ "expectedSources": ["appium/quickstart/install.md"],
10
+ "difficulty": "easy",
11
+ "category": "setup"
12
+ },
13
+ {
14
+ "id": "q02",
15
+ "query": "What capabilities does the XCUITest driver support?",
16
+ "expectedSources": ["appium-xcuitest-driver/reference/capabilities.md"],
17
+ "difficulty": "easy",
18
+ "category": "capabilities"
19
+ },
20
+ {
21
+ "id": "q03",
22
+ "query": "how to run iOS tests in parallel",
23
+ "expectedSources": ["appium-xcuitest-driver/guides/parallel-tests.md"],
24
+ "difficulty": "easy",
25
+ "category": "ios"
26
+ },
27
+ {
28
+ "id": "q04",
29
+ "query": "push and pull files from an iOS device",
30
+ "expectedSources": ["appium-xcuitest-driver/guides/file-transfer.md"],
31
+ "difficulty": "easy",
32
+ "category": "ios"
33
+ },
34
+ {
35
+ "id": "q05",
36
+ "query": "read and write the clipboard on iOS",
37
+ "expectedSources": ["appium-xcuitest-driver/guides/clipboard.md"],
38
+ "difficulty": "easy",
39
+ "category": "ios"
40
+ },
41
+ {
42
+ "id": "q06",
43
+ "query": "what locator strategies are supported by XCUITest",
44
+ "expectedSources": [
45
+ "appium-xcuitest-driver/reference/locator-strategies.md"
46
+ ],
47
+ "difficulty": "easy",
48
+ "category": "locators"
49
+ },
50
+ {
51
+ "id": "q07",
52
+ "query": "how do I use iOS predicate strings to find elements",
53
+ "expectedSources": ["appium-xcuitest-driver/reference/ios-predicate.md"],
54
+ "difficulty": "easy",
55
+ "category": "locators"
56
+ },
57
+ {
58
+ "id": "q08",
59
+ "query": "uiautomator2 driver capabilities",
60
+ "expectedSources": ["appium-uiautomator2-driver/capability-sets.md"],
61
+ "difficulty": "easy",
62
+ "category": "android"
63
+ },
64
+ {
65
+ "id": "q09",
66
+ "query": "Appium server command line arguments",
67
+ "expectedSources": ["appium/cli/args.md"],
68
+ "difficulty": "easy",
69
+ "category": "cli"
70
+ },
71
+ {
72
+ "id": "q10",
73
+ "query": "install a root certificate on an iOS device",
74
+ "expectedSources": [
75
+ "appium-xcuitest-driver/guides/install-certificate.md"
76
+ ],
77
+ "difficulty": "easy",
78
+ "category": "ios"
79
+ },
80
+
81
+ {
82
+ "id": "q11",
83
+ "query": "I'm new to Appium, where should I start?",
84
+ "expectedSources": [
85
+ "appium/quickstart/index.md",
86
+ "appium/intro/index.md",
87
+ "appium/quickstart/requirements.md"
88
+ ],
89
+ "difficulty": "medium",
90
+ "category": "intro"
91
+ },
92
+ {
93
+ "id": "q12",
94
+ "query": "which driver should I use to automate android",
95
+ "expectedSources": [
96
+ "appium/quickstart/uiauto2-driver.md",
97
+ "appium/intro/drivers.md",
98
+ "appium/ecosystem/drivers.md"
99
+ ],
100
+ "difficulty": "medium",
101
+ "category": "android"
102
+ },
103
+ {
104
+ "id": "q13",
105
+ "query": "how do I switch to a webview in an iOS hybrid app",
106
+ "expectedSources": [
107
+ "appium-xcuitest-driver/guides/hybrid.md",
108
+ "appium/guides/context.md"
109
+ ],
110
+ "difficulty": "medium",
111
+ "category": "hybrid"
112
+ },
113
+ {
114
+ "id": "q14",
115
+ "query": "how to set up code signing for real iPhone testing",
116
+ "expectedSources": [
117
+ "appium-xcuitest-driver/preparation/real-device-config.md",
118
+ "appium-xcuitest-driver/preparation/prov-profile-basic-auto.md",
119
+ "appium-xcuitest-driver/preparation/prov-profile-basic-manual.md"
120
+ ],
121
+ "difficulty": "medium",
122
+ "category": "ios-real-device"
123
+ },
124
+ {
125
+ "id": "q15",
126
+ "query": "swipe gesture on android",
127
+ "expectedSources": [
128
+ "appium-uiautomator2-driver/android-mobile-gestures.md"
129
+ ],
130
+ "difficulty": "medium",
131
+ "category": "gestures"
132
+ },
133
+ {
134
+ "id": "q16",
135
+ "query": "running tests against an .aab Android App Bundle",
136
+ "expectedSources": ["appium-uiautomator2-driver/android-appbundle.md"],
137
+ "difficulty": "medium",
138
+ "category": "android"
139
+ },
140
+ {
141
+ "id": "q17",
142
+ "query": "differences between Appium 1 and Appium 2",
143
+ "expectedSources": ["appium/guides/migrating-1-to-2.md"],
144
+ "difficulty": "medium",
145
+ "category": "migration"
146
+ },
147
+ {
148
+ "id": "q18",
149
+ "query": "enable Touch ID in an iOS simulator test",
150
+ "expectedSources": ["appium-xcuitest-driver/guides/touch-id.md"],
151
+ "difficulty": "medium",
152
+ "category": "ios"
153
+ },
154
+ {
155
+ "id": "q19",
156
+ "query": "use a custom WebDriverAgent server",
157
+ "expectedSources": [
158
+ "appium-xcuitest-driver/guides/wda-custom-server.md",
159
+ "appium-xcuitest-driver/guides/run-prebuilt-wda.md"
160
+ ],
161
+ "difficulty": "medium",
162
+ "category": "wda"
163
+ },
164
+ {
165
+ "id": "q20",
166
+ "query": "setting up Appium on a CI server",
167
+ "expectedSources": ["appium-xcuitest-driver/guides/ci-setup.md"],
168
+ "difficulty": "medium",
169
+ "category": "ci"
170
+ },
171
+
172
+ {
173
+ "id": "q21",
174
+ "query": "my tests are super slow on iOS, what's going on",
175
+ "expectedSources": [
176
+ "appium-xcuitest-driver/guides/wda-slowness.md",
177
+ "appium-xcuitest-driver/guides/troubleshooting.md"
178
+ ],
179
+ "difficulty": "vague",
180
+ "category": "troubleshooting"
181
+ },
182
+ {
183
+ "id": "q22",
184
+ "query": "appium can't find my button",
185
+ "expectedSources": [
186
+ "appium-xcuitest-driver/guides/elements-lookup-troubleshooting.md",
187
+ "appium-xcuitest-driver/reference/locator-strategies.md"
188
+ ],
189
+ "difficulty": "vague",
190
+ "category": "troubleshooting"
191
+ },
192
+ {
193
+ "id": "q23",
194
+ "query": "I switched xcode versions and now nothing works",
195
+ "expectedSources": [
196
+ "appium-xcuitest-driver/guides/multiple-xcode-versions.md"
197
+ ],
198
+ "difficulty": "vague",
199
+ "category": "troubleshooting"
200
+ },
201
+ {
202
+ "id": "q24",
203
+ "query": "can I reuse a WebDriverAgent that's already running",
204
+ "expectedSources": [
205
+ "appium-xcuitest-driver/guides/attach-to-running-wda.md"
206
+ ],
207
+ "difficulty": "vague",
208
+ "category": "wda"
209
+ },
210
+ {
211
+ "id": "q25",
212
+ "query": "show me how to write a test in python",
213
+ "expectedSources": ["appium/quickstart/test-py.md"],
214
+ "difficulty": "vague",
215
+ "category": "clients"
216
+ }
217
+ ]
218
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"find-element.d.ts","sourceRoot":"","sources":["../../../../src/tools/ai/handlers/find-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAShE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAK3C,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CA+CxB"}
1
+ {"version":3,"file":"find-element.d.ts","sourceRoot":"","sources":["../../../../src/tools/ai/handlers/find-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAShE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CA0CxB"}
@@ -7,12 +7,11 @@ import { errorResult, textResultWithPrimaryElementId, toolErrorMessage, } from '
7
7
  // Creating a new AIVisionFinder() on every call would reset the cache each time.
8
8
  let _finderInstance = null;
9
9
  export async function handleFindElement(driver, args) {
10
- if (!args.instruction) {
11
- return errorResult('instruction is required for action=find_element. ' +
12
- 'Example: { action: "find_element", instruction: "yellow search button at bottom" }');
13
- }
10
+ // `instruction` presence/non-emptiness is enforced at schema level via
11
+ // `aiSchema.superRefine`. Narrow the optional type here for downstream calls.
12
+ const instruction = args.instruction;
14
13
  try {
15
- log.info(`Finding element using AI with instruction: "${args.instruction}"`);
14
+ log.info(`Finding element using AI with instruction: "${instruction}"`);
16
15
  const screenshotBase64 = await getScreenshot(driver);
17
16
  const imageBuffer = Buffer.from(screenshotBase64, 'base64');
18
17
  const sharp = imageUtil.requireSharp();
@@ -22,7 +21,7 @@ export async function handleFindElement(driver, args) {
22
21
  }
23
22
  const { width, height } = metadata;
24
23
  const finder = getAIVisionFinder();
25
- const result = await finder.findElement(screenshotBase64, args.instruction, width, height);
24
+ const result = await finder.findElement(screenshotBase64, instruction, width, height);
26
25
  // Format: "ai-element:{x},{y}:{bbox}" — consumed by appium_gesture handlers.
27
26
  const elementUUID = `ai-element:${result.center.x},${result.center.y}:${result.bbox.join(',')}`;
28
27
  let detail = `Successfully found "${result.target}" at coordinates (${result.center.x}, ${result.center.y}) using AI vision.`;
@@ -1 +1 @@
1
- {"version":3,"file":"find-element.js","sourceRoot":"","sources":["../../../../src/tools/ai/handlers/find-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,EACL,WAAW,EACX,8BAA8B,EAC9B,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,4EAA4E;AAC5E,iFAAiF;AACjF,IAAI,eAAe,GAA0B,IAAI,CAAC;AAClD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAsB,EACtB,IAAY;IAEZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,OAAO,WAAW,CAChB,mDAAmD;YACjD,oFAAoF,CACvF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CACN,+CAA+C,IAAI,CAAC,WAAW,GAAG,CACnE,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAErD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAEnC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CACrC,gBAAgB,EAChB,IAAI,CAAC,WAAW,EAChB,KAAK,EACL,MAAM,CACP,CAAC;QAEF,6EAA6E;QAC7E,MAAM,WAAW,GAAG,cAAc,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAEhG,IAAI,MAAM,GAAG,uBAAuB,MAAM,CAAC,MAAM,qBAAqB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC;QAC9H,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,MAAM,IAAI,kBAAkB,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC1D,CAAC;QAED,OAAO,8BAA8B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,kCAAkC,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,cAAc,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"find-element.js","sourceRoot":"","sources":["../../../../src/tools/ai/handlers/find-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,EACL,WAAW,EACX,8BAA8B,EAC9B,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,4EAA4E;AAC5E,iFAAiF;AACjF,IAAI,eAAe,GAA0B,IAAI,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAsB,EACtB,IAAY;IAEZ,uEAAuE;IACvE,8EAA8E;IAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAqB,CAAC;IAE/C,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,+CAA+C,WAAW,GAAG,CAAC,CAAC;QAExE,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAErD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAEnC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CACrC,gBAAgB,EAChB,WAAW,EACX,KAAK,EACL,MAAM,CACP,CAAC;QAEF,6EAA6E;QAC7E,MAAM,WAAW,GAAG,cAAc,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAEhG,IAAI,MAAM,GAAG,uBAAuB,MAAM,CAAC,MAAM,qBAAqB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC;QAC9H,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,MAAM,IAAI,kBAAkB,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC1D,CAAC;QAED,OAAO,8BAA8B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,kCAAkC,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,cAAc,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/tools/ai/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,UAAU,2BAA4B,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,QAAQ;;;;;;iBAsBnB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/tools/ai/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,UAAU,2BAA4B,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,QAAQ;;;;;;iBAoCjB,CAAC;AAEL,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export const AI_ACTIONS = ['find_element'];
3
- export const aiSchema = z.object({
3
+ export const aiSchema = z
4
+ .object({
4
5
  action: z
5
6
  .enum(AI_ACTIONS)
6
7
  .describe(`AI capability to invoke. ` +
@@ -16,5 +17,17 @@ export const aiSchema = z.object({
16
17
  .string()
17
18
  .optional()
18
19
  .describe('Session ID to target. If omitted, uses the active session.'),
20
+ })
21
+ .superRefine((data, ctx) => {
22
+ if (data.action === 'find_element') {
23
+ if (!data.instruction?.trim()) {
24
+ ctx.addIssue({
25
+ code: z.ZodIssueCode.custom,
26
+ message: 'instruction is required and must be non-empty when action is find_element. ' +
27
+ 'Example: { "action": "find_element", "instruction": "yellow search button at bottom" }',
28
+ path: ['instruction'],
29
+ });
30
+ }
31
+ }
19
32
  });
20
33
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/tools/ai/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,cAAc,CAAU,CAAC;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,UAAU,CAAC;SAChB,QAAQ,CACP,2BAA2B;QACzB,4FAA4F;QAC5F,iHAAiH,CACpH;IAEH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sDAAsD;QACpD,8BAA8B;QAC9B,iHAAiH,CACpH;IAEH,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/tools/ai/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,cAAc,CAAU,CAAC;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC;KACtB,MAAM,CAAC;IACN,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,UAAU,CAAC;SAChB,QAAQ,CACP,2BAA2B;QACzB,4FAA4F;QAC5F,iHAAiH,CACpH;IAEH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sDAAsD;QACpD,8BAA8B;QAC9B,iHAAiH,CACpH;IAEH,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC;KACD,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACzB,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EACL,6EAA6E;oBAC7E,wFAAwF;gBAC1F,IAAI,EAAE,CAAC,aAAa,CAAC;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -10,13 +10,16 @@
10
10
  export declare class SentenceTransformersEmbeddings {
11
11
  private model;
12
12
  private modelName;
13
+ private queryInstruction;
13
14
  private isInitialized;
14
15
  private transformers;
15
16
  constructor(options?: {
16
17
  modelName?: string;
18
+ queryInstruction?: string;
17
19
  });
18
20
  /**
19
- * Generate embeddings for a single text (LangChain interface)
21
+ * Generate embeddings for a single text (LangChain interface).
22
+ * Applies queryInstruction prefix when set.
20
23
  */
21
24
  embedQuery(text: string): Promise<number[]>;
22
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-transformers-embeddings.d.ts","sourceRoot":"","sources":["../../../src/tools/documentation/sentence-transformers-embeddings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,qBAAa,8BAA8B;IACzC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAa;gBAErB,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAKhD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBjD;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA0C1D;;OAEG;YACW,sBAAsB;IAoBpC;;OAEG;YACW,eAAe;CAyB9B"}
1
+ {"version":3,"file":"sentence-transformers-embeddings.d.ts","sourceRoot":"","sources":["../../../src/tools/documentation/sentence-transformers-embeddings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,qBAAa,8BAA8B;IACzC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAa;gBAErB,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAO;IAO3E;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BjD;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA0C1D;;OAEG;YACW,sBAAsB;IAoBpC;;OAEG;YACW,eAAe;CAyB9B"}
@@ -11,14 +11,18 @@ import log from '../../logger.js';
11
11
  export class SentenceTransformersEmbeddings {
12
12
  model = null;
13
13
  modelName;
14
+ queryInstruction;
14
15
  isInitialized = false;
15
16
  transformers = null;
16
17
  constructor(options = {}) {
17
- // Use a lightweight, fast model by default
18
18
  this.modelName = options.modelName || 'Xenova/all-MiniLM-L6-v2';
19
+ // Optional prefix prepended only to queries (not documents).
20
+ // BGE models use this to close the question/passage style gap.
21
+ this.queryInstruction = options.queryInstruction ?? '';
19
22
  }
20
23
  /**
21
- * Generate embeddings for a single text (LangChain interface)
24
+ * Generate embeddings for a single text (LangChain interface).
25
+ * Applies queryInstruction prefix when set.
22
26
  */
23
27
  async embedQuery(text) {
24
28
  await this.initializeModel();
@@ -26,7 +30,10 @@ export class SentenceTransformersEmbeddings {
26
30
  throw new Error('Model not initialized');
27
31
  }
28
32
  try {
29
- const result = await this.model(text, {
33
+ const input = this.queryInstruction
34
+ ? `${this.queryInstruction}${text}`
35
+ : text;
36
+ const result = await this.model(input, {
30
37
  pooling: 'mean',
31
38
  normalize: true,
32
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-transformers-embeddings.js","sourceRoot":"","sources":["../../../src/tools/documentation/sentence-transformers-embeddings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sentence-transformers-embeddings.js","sourceRoot":"","sources":["../../../src/tools/documentation/sentence-transformers-embeddings.ts"],"names":[],"mappings":"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"}