appium-mcp 1.1.4 → 1.1.6
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 +12 -0
- package/README.md +1 -1
- package/dist/locators/generate-all-locators.js +2 -1
- package/dist/locators/generate-all-locators.js.map +1 -1
- package/dist/resources/index.js +2 -1
- package/dist/resources/index.js.map +1 -1
- package/dist/tools/answer-appium.js +2 -1
- package/dist/tools/answer-appium.js.map +1 -1
- package/dist/tools/boot-simulator.js +2 -1
- package/dist/tools/boot-simulator.js.map +1 -1
- package/dist/tools/delete-session.js +2 -1
- package/dist/tools/delete-session.js.map +1 -1
- package/dist/tools/documentation/index.js +7 -6
- package/dist/tools/documentation/index.js.map +1 -1
- package/dist/tools/documentation/reasoning-rag.js +16 -15
- package/dist/tools/documentation/reasoning-rag.js.map +1 -1
- package/dist/tools/documentation/sentence-transformers-embeddings.js +8 -7
- package/dist/tools/documentation/sentence-transformers-embeddings.js.map +1 -1
- package/dist/tools/documentation/simple-pdf-indexer.js +48 -47
- package/dist/tools/documentation/simple-pdf-indexer.js.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/install-wda.js +6 -5
- package/dist/tools/install-wda.js.map +1 -1
- package/dist/tools/interactions/get-page-source.d.ts +2 -0
- package/dist/tools/interactions/get-page-source.js +48 -0
- package/dist/tools/interactions/get-page-source.js.map +1 -0
- package/dist/tools/locators.js +2 -3
- package/dist/tools/locators.js.map +1 -1
- package/dist/tools/scroll.js +5 -4
- package/dist/tools/scroll.js.map +1 -1
- package/dist/tools/session-store.js +6 -5
- package/dist/tools/session-store.js.map +1 -1
- package/package.json +1 -1
- package/src/locators/generate-all-locators.ts +2 -1
- package/src/resources/index.ts +2 -1
- package/src/tools/README.md +2 -1
- package/src/tools/answer-appium.ts +2 -1
- package/src/tools/boot-simulator.ts +2 -1
- package/src/tools/delete-session.ts +2 -1
- package/src/tools/documentation/index.ts +7 -6
- package/src/tools/documentation/reasoning-rag.ts +16 -15
- package/src/tools/documentation/sentence-transformers-embeddings.ts +9 -7
- package/src/tools/documentation/simple-pdf-indexer.ts +48 -51
- package/src/tools/index.ts +2 -0
- package/src/tools/install-wda.ts +6 -5
- package/src/tools/interactions/get-page-source.ts +52 -0
- package/src/tools/locators.ts +3 -4
- package/src/tools/scroll.ts +5 -4
- package/src/tools/session-store.ts +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [1.1.6](https://github.com/appium/appium-mcp/compare/v1.1.5...v1.1.6) (2025-11-14)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* replace console logs with appium logger ([#26](https://github.com/appium/appium-mcp/issues/26)) ([82cd06c](https://github.com/appium/appium-mcp/commit/82cd06cdcaf2d6e37393a2adbe4b473f5319986e))
|
|
6
|
+
|
|
7
|
+
## [1.1.5](https://github.com/appium/appium-mcp/compare/v1.1.4...v1.1.5) (2025-11-14)
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* add appium_get_page_source tool ([#25](https://github.com/appium/appium-mcp/issues/25)) ([e8a2e33](https://github.com/appium/appium-mcp/commit/e8a2e33fa21767f8714b28aa1f8ac3d84ba0e470))
|
|
12
|
+
|
|
1
13
|
## [1.1.4](https://github.com/appium/mcp-appium/compare/v1.1.3...v1.1.4) (2025-11-08)
|
|
2
14
|
|
|
3
15
|
### Miscellaneous Chores
|
package/README.md
CHANGED
|
@@ -67,7 +67,7 @@ To integrate MCP Appium with your MCP client, add the following to your configur
|
|
|
67
67
|
"timeout": 100,
|
|
68
68
|
"type": "stdio",
|
|
69
69
|
"command": "npx",
|
|
70
|
-
"args": ["mcp
|
|
70
|
+
"args": ["appium-mcp"],
|
|
71
71
|
"env": {
|
|
72
72
|
"ANDROID_HOME": "/path/to/android/sdk",
|
|
73
73
|
"CAPABILITIES_CONFIG": "/path/to/your/capabilities.json"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { getSuggestedLocators } from './locator-generation.js';
|
|
4
4
|
import { xmlToJSON } from './source-parsing.js';
|
|
5
5
|
import { shouldIncludeElement } from './element-filter.js';
|
|
6
|
+
import log from './logger.js';
|
|
6
7
|
/**
|
|
7
8
|
* Transforms a JSONElement with locators into ElementWithLocators format
|
|
8
9
|
*/
|
|
@@ -35,7 +36,7 @@ function processElement(element, sourceXML, isNative, automationName, filters, r
|
|
|
35
36
|
results.push(transformElementWithLocators(element, strategyMap));
|
|
36
37
|
}
|
|
37
38
|
catch (error) {
|
|
38
|
-
|
|
39
|
+
log.error(`Error generating locators for element at path ${element.path}:`, error);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-all-locators.js","sourceRoot":"","sources":["../../src/locators/generate-all-locators.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,uDAAuD;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAe,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAiB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-all-locators.js","sourceRoot":"","sources":["../../src/locators/generate-all-locators.ts"],"names":[],"mappings":"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"}
|
package/dist/resources/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// Export all resources
|
|
2
2
|
import javaTemplatesResource from './java/template.js';
|
|
3
|
+
import log from '../locators/logger.js';
|
|
3
4
|
export default function registerResources(server) {
|
|
4
5
|
javaTemplatesResource(server);
|
|
5
|
-
|
|
6
|
+
log.info('All resources registered');
|
|
6
7
|
}
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;AACvD,OAAO,GAAG,MAAM,uBAAuB,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,MAAW;IACnD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { answerAppiumQuery, initializeAppiumDocumentation, } from './documentation/index.js';
|
|
6
|
+
import log from '../locators/logger.js';
|
|
6
7
|
export default function answerAppium(server) {
|
|
7
8
|
server.addTool({
|
|
8
9
|
name: 'appium_documentation_query',
|
|
@@ -41,7 +42,7 @@ export default function answerAppium(server) {
|
|
|
41
42
|
catch (docError) {
|
|
42
43
|
// If documentation query fails, try to initialize and retry once
|
|
43
44
|
try {
|
|
44
|
-
|
|
45
|
+
log.info('Documentation not initialized, initializing now...');
|
|
45
46
|
await initializeAppiumDocumentation();
|
|
46
47
|
const result = await answerAppiumQuery({ query });
|
|
47
48
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answer-appium.js","sourceRoot":"","sources":["../../src/tools/answer-appium.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"answer-appium.js","sourceRoot":"","sources":["../../src/tools/answer-appium.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,GAAG,MAAM,uBAAuB,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAW;IAC9C,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE;;OAEV;QACH,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,CAAC,kDAAkD,CAAC;SAChE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,OAAY,EAAgB,EAAE;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,6BAA6B;yBACpC;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM,CAAC,MAAM;yBACpB;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,iEAAiE;gBACjE,IAAI,CAAC;oBACH,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;oBAC/D,MAAM,6BAA6B,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBAClD,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,MAAM,CAAC,MAAM;6BACpB;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBACpB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,wCACH,UAAoB,CAAC,OACxB,qDAAqD;6BACtD;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { Simctl } from 'node-simctl';
|
|
6
6
|
import { IOSManager } from '../devicemanager/ios-manager.js';
|
|
7
|
+
import log from '../locators/logger.js';
|
|
7
8
|
export default function bootSimulator(server) {
|
|
8
9
|
server.addTool({
|
|
9
10
|
name: 'boot_simulator',
|
|
@@ -62,7 +63,7 @@ export default function bootSimulator(server) {
|
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
catch (error) {
|
|
65
|
-
|
|
66
|
+
log.error('Error booting simulator:', error);
|
|
66
67
|
throw new Error(`Failed to boot simulator: ${error.message}`);
|
|
67
68
|
}
|
|
68
69
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot-simulator.js","sourceRoot":"","sources":["../../src/tools/boot-simulator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"boot-simulator.js","sourceRoot":"","sources":["../../src/tools/boot-simulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { safeDeleteSession } from './session-store.js';
|
|
6
|
+
import log from '../locators/logger.js';
|
|
6
7
|
export default function deleteSession(server) {
|
|
7
8
|
server.addTool({
|
|
8
9
|
name: 'delete_session',
|
|
@@ -38,7 +39,7 @@ export default function deleteSession(server) {
|
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
catch (error) {
|
|
41
|
-
|
|
42
|
+
log.error(`Error deleting session`, error);
|
|
42
43
|
throw new Error(`Failed to delete session: ${error.message}`);
|
|
43
44
|
}
|
|
44
45
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-session.js","sourceRoot":"","sources":["../../src/tools/delete-session.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"delete-session.js","sourceRoot":"","sources":["../../src/tools/delete-session.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,GAAG,MAAM,uBAAuB,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAW;IAC/C,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,2DAA2D;QACxE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,WAAW,EAAE;YACX,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,IAAkB,EAAE;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;gBAE1C,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,+BAA+B;6BACtC;yBACF;qBACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,0DAA0D;6BACjE;yBACF;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { queryVectorStore, indexAllMarkdownFiles, } from './simple-pdf-indexer.js';
|
|
8
8
|
import * as path from 'path';
|
|
9
|
+
import log from '../../locators/logger.js';
|
|
9
10
|
/**
|
|
10
11
|
* Initialize the Appium documentation index
|
|
11
12
|
* @param resourcesPath Path to the resources directory containing markdown files
|
|
@@ -14,12 +15,12 @@ export async function initializeAppiumDocumentation(resourcesPath) {
|
|
|
14
15
|
try {
|
|
15
16
|
// Default to submodules directory if not specified
|
|
16
17
|
const docsPath = resourcesPath || path.resolve(__dirname, '../../resources/submodules');
|
|
17
|
-
|
|
18
|
+
log.info(`Initializing Appium documentation from: ${docsPath}`);
|
|
18
19
|
await indexAllMarkdownFiles(docsPath);
|
|
19
|
-
|
|
20
|
+
log.info('Appium documentation indexing completed');
|
|
20
21
|
}
|
|
21
22
|
catch (error) {
|
|
22
|
-
|
|
23
|
+
log.error('Error initializing Appium documentation:', error);
|
|
23
24
|
throw error;
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -31,7 +32,7 @@ export async function initializeAppiumDocumentation(resourcesPath) {
|
|
|
31
32
|
export async function answerAppiumQuery(options) {
|
|
32
33
|
try {
|
|
33
34
|
const { query } = options;
|
|
34
|
-
|
|
35
|
+
log.info(`Querying vector store for: "${query}"`);
|
|
35
36
|
const results = await queryVectorStore(query); // Get relevant chunks
|
|
36
37
|
if (!results || results.length === 0) {
|
|
37
38
|
return {
|
|
@@ -46,7 +47,7 @@ export async function answerAppiumQuery(options) {
|
|
|
46
47
|
doc.metadata?.filename ||
|
|
47
48
|
doc.metadata?.source)
|
|
48
49
|
.filter((source, index, arr) => source && arr.indexOf(source) === index); // Remove duplicates
|
|
49
|
-
|
|
50
|
+
log.info(`Found ${results.length} relevant chunks from ${sources.length} sources`);
|
|
50
51
|
// Return the chunks for the client LLM to process
|
|
51
52
|
// The client will use its own LLM to generate the final answer
|
|
52
53
|
return {
|
|
@@ -56,7 +57,7 @@ export async function answerAppiumQuery(options) {
|
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
59
|
catch (error) {
|
|
59
|
-
|
|
60
|
+
log.error('Error querying Appium documentation:', error);
|
|
60
61
|
throw error;
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/documentation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/documentation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,GAAG,MAAM,0BAA0B,CAAC;AAW3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,aAAsB;IAEtB,IAAI,CAAC;QACH,mDAAmD;QACnD,MAAM,QAAQ,GACZ,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,2CAA2C,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAEvC;IACC,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,+BAA+B,KAAK,GAAG,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB;QAErE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO;gBACL,MAAM,EACJ,8FAA8F;gBAChG,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,OAAO;aACpB,GAAG,CACF,CAAC,GAAQ,EAAE,EAAE,CACX,GAAG,CAAC,QAAQ,EAAE,YAAY;YAC1B,GAAG,CAAC,QAAQ,EAAE,QAAQ;YACtB,GAAG,CAAC,QAAQ,EAAE,MAAM,CACvB;aACA,MAAM,CACL,CAAC,MAAW,EAAE,KAAa,EAAE,GAAU,EAAE,EAAE,CACzC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,CAC1C,CAAC,CAAC,oBAAoB;QAEzB,GAAG,CAAC,IAAI,CACN,SAAS,OAAO,CAAC,MAAM,yBAAyB,OAAO,CAAC,MAAM,UAAU,CACzE,CAAC;QAEF,kDAAkD;QAClD,+DAA+D;QAC/D,OAAO;YACL,MAAM,EAAE,SACN,OAAO,CAAC,MACV,sEAAsE,MAAM,CAAC,IAAI,CAC/E,aAAa,CACd,EAAE;YACH,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* It can perform summarization, question-answering, and analysis on retrieved chunks.
|
|
7
7
|
*/
|
|
8
8
|
import { queryVectorStore } from './simple-pdf-indexer.js';
|
|
9
|
+
import log from '../../locators/logger.js';
|
|
9
10
|
/**
|
|
10
11
|
* Reasoning-enhanced RAG processor
|
|
11
12
|
*/
|
|
@@ -28,10 +29,10 @@ export class ReasoningRAG {
|
|
|
28
29
|
const importTransformers = new Function('return import("@xenova/transformers")');
|
|
29
30
|
this.transformers = await importTransformers();
|
|
30
31
|
this.isInitialized = true;
|
|
31
|
-
|
|
32
|
+
log.info('Xenova transformers initialized for reasoning');
|
|
32
33
|
}
|
|
33
34
|
catch (error) {
|
|
34
|
-
|
|
35
|
+
log.error('Error importing @xenova/transformers:', error);
|
|
35
36
|
throw new Error(`Failed to import @xenova/transformers: ${error instanceof Error ? error.message : String(error)}`);
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -44,15 +45,15 @@ export class ReasoningRAG {
|
|
|
44
45
|
return this.models.get(modelKey);
|
|
45
46
|
}
|
|
46
47
|
await this.initializeTransformers();
|
|
47
|
-
|
|
48
|
+
log.info(`Loading model for ${config.task}: ${config.modelName}`);
|
|
48
49
|
try {
|
|
49
50
|
const model = await this.transformers.pipeline(config.task, config.modelName);
|
|
50
51
|
this.models.set(modelKey, model);
|
|
51
|
-
|
|
52
|
+
log.info(`Successfully loaded model: ${config.modelName}`);
|
|
52
53
|
return model;
|
|
53
54
|
}
|
|
54
55
|
catch (error) {
|
|
55
|
-
|
|
56
|
+
log.error(`Error loading model ${config.modelName}:`, error);
|
|
56
57
|
throw new Error(`Failed to load model: ${error instanceof Error ? error.message : String(error)}`);
|
|
57
58
|
}
|
|
58
59
|
}
|
|
@@ -117,7 +118,7 @@ export class ReasoningRAG {
|
|
|
117
118
|
};
|
|
118
119
|
}
|
|
119
120
|
catch (error) {
|
|
120
|
-
|
|
121
|
+
log.error(`Error performing reasoning with ${config.task}:`, error);
|
|
121
122
|
return {
|
|
122
123
|
originalChunk: text,
|
|
123
124
|
reasoningOutput: `Error during reasoning: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -144,7 +145,7 @@ export class ReasoningRAG {
|
|
|
144
145
|
results.push(...batchResults);
|
|
145
146
|
// Log progress for large batches
|
|
146
147
|
if (chunks.length > batchSize) {
|
|
147
|
-
|
|
148
|
+
log.info(`Processed reasoning for ${Math.min(i + batchSize, chunks.length)}/${chunks.length} chunks`);
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
151
|
return results;
|
|
@@ -182,9 +183,9 @@ export class ReasoningRAG {
|
|
|
182
183
|
async queryWithReasoning(query, options = {}) {
|
|
183
184
|
const { topK = 50, reasoningTasks = ['summarization', 'question-answering'], customConfigs, } = options;
|
|
184
185
|
try {
|
|
185
|
-
|
|
186
|
+
log.info(`Starting reasoning-enhanced RAG query: "${query}"`);
|
|
186
187
|
// Step 1: Retrieve relevant chunks using existing RAG
|
|
187
|
-
|
|
188
|
+
log.info(`Retrieving top ${topK} relevant chunks...`);
|
|
188
189
|
const retrievedChunks = await queryVectorStore(query, topK);
|
|
189
190
|
if (!retrievedChunks || retrievedChunks.length === 0) {
|
|
190
191
|
return {
|
|
@@ -196,7 +197,7 @@ export class ReasoningRAG {
|
|
|
196
197
|
sources: [],
|
|
197
198
|
};
|
|
198
199
|
}
|
|
199
|
-
|
|
200
|
+
log.info(`Retrieved ${retrievedChunks.length} chunks for reasoning`);
|
|
200
201
|
// Step 2: Configure reasoning models
|
|
201
202
|
const configs = customConfigs || [
|
|
202
203
|
// Summarization using T5
|
|
@@ -215,10 +216,10 @@ export class ReasoningRAG {
|
|
|
215
216
|
// Filter configs based on requested tasks
|
|
216
217
|
const filteredConfigs = configs.filter(config => reasoningTasks.includes(config.task));
|
|
217
218
|
// Step 3: Perform reasoning on retrieved chunks
|
|
218
|
-
|
|
219
|
+
log.info(`Performing reasoning with ${filteredConfigs.length} different models...`);
|
|
219
220
|
const reasoningResults = await this.processChunksWithReasoning(retrievedChunks, filteredConfigs, query);
|
|
220
221
|
// Step 4: Generate comprehensive summary
|
|
221
|
-
|
|
222
|
+
log.info('Generating comprehensive summary...');
|
|
222
223
|
const summary = await this.generateComprehensiveSummary(reasoningResults, query);
|
|
223
224
|
// Step 5: Extract best answer from reasoning results
|
|
224
225
|
const qaResults = reasoningResults.filter(result => result.metadata.task === 'question-answering' &&
|
|
@@ -232,7 +233,7 @@ export class ReasoningRAG {
|
|
|
232
233
|
doc.metadata?.filename ||
|
|
233
234
|
doc.metadata?.source)
|
|
234
235
|
.filter((source, index, arr) => source && arr.indexOf(source) === index);
|
|
235
|
-
|
|
236
|
+
log.info(`Reasoning-enhanced RAG completed. Generated ${reasoningResults.length} reasoning results from ${sources.length} sources`);
|
|
236
237
|
return {
|
|
237
238
|
query,
|
|
238
239
|
retrievedChunks,
|
|
@@ -243,7 +244,7 @@ export class ReasoningRAG {
|
|
|
243
244
|
};
|
|
244
245
|
}
|
|
245
246
|
catch (error) {
|
|
246
|
-
|
|
247
|
+
log.error('Error in reasoning-enhanced RAG:', error);
|
|
247
248
|
throw new Error(`Reasoning-enhanced RAG failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
248
249
|
}
|
|
249
250
|
}
|
|
@@ -273,7 +274,7 @@ export class ReasoningRAG {
|
|
|
273
274
|
*/
|
|
274
275
|
async cleanup() {
|
|
275
276
|
this.models.clear();
|
|
276
|
-
|
|
277
|
+
log.info('Reasoning RAG resources cleaned up');
|
|
277
278
|
}
|
|
278
279
|
}
|
|
279
280
|
// Export a singleton instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning-rag.js","sourceRoot":"","sources":["../../../src/tools/documentation/reasoning-rag.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"reasoning-rag.js","sourceRoot":"","sources":["../../../src/tools/documentation/reasoning-rag.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Uses @xenova/transformers to provide local embeddings without requiring API keys.
|
|
5
5
|
* This is perfect for self-hosted MCP servers and eliminates external dependencies.
|
|
6
6
|
*/
|
|
7
|
+
import log from '../../locators/logger.js';
|
|
7
8
|
/**
|
|
8
9
|
* LangChain-compatible embeddings class using sentence-transformers
|
|
9
10
|
*/
|
|
@@ -28,7 +29,7 @@ export class SentenceTransformersEmbeddings {
|
|
|
28
29
|
this.transformers = await importTransformers();
|
|
29
30
|
}
|
|
30
31
|
catch (error) {
|
|
31
|
-
|
|
32
|
+
log.error('Error importing @xenova/transformers:', error);
|
|
32
33
|
throw new Error(`Failed to import @xenova/transformers: ${error instanceof Error ? error.message : String(error)}`);
|
|
33
34
|
}
|
|
34
35
|
}
|
|
@@ -40,14 +41,14 @@ export class SentenceTransformersEmbeddings {
|
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
42
43
|
await this.initializeTransformers();
|
|
43
|
-
|
|
44
|
+
log.info(`Initializing sentence-transformers model: ${this.modelName}`);
|
|
44
45
|
try {
|
|
45
46
|
this.model = await this.transformers.pipeline('feature-extraction', this.modelName);
|
|
46
47
|
this.isInitialized = true;
|
|
47
|
-
|
|
48
|
+
log.info(`Successfully initialized sentence-transformers model: ${this.modelName}`);
|
|
48
49
|
}
|
|
49
50
|
catch (error) {
|
|
50
|
-
|
|
51
|
+
log.error('Error initializing sentence-transformers model:', error);
|
|
51
52
|
throw new Error(`Failed to initialize sentence-transformers model: ${error instanceof Error ? error.message : String(error)}`);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
@@ -69,7 +70,7 @@ export class SentenceTransformersEmbeddings {
|
|
|
69
70
|
return embeddings;
|
|
70
71
|
}
|
|
71
72
|
catch (error) {
|
|
72
|
-
|
|
73
|
+
log.error('Error generating embeddings:', error);
|
|
73
74
|
throw new Error(`Failed to generate embeddings: ${error instanceof Error ? error.message : String(error)}`);
|
|
74
75
|
}
|
|
75
76
|
}
|
|
@@ -97,13 +98,13 @@ export class SentenceTransformersEmbeddings {
|
|
|
97
98
|
}
|
|
98
99
|
// Log progress for large batches
|
|
99
100
|
if (texts.length > batchSize) {
|
|
100
|
-
|
|
101
|
+
log.info(`Processed ${Math.min(i + batchSize, texts.length)}/${texts.length} documents`);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
return embeddings;
|
|
104
105
|
}
|
|
105
106
|
catch (error) {
|
|
106
|
-
|
|
107
|
+
log.error('Error generating document embeddings:', error);
|
|
107
108
|
throw new Error(`Failed to generate document embeddings: ${error instanceof Error ? error.message : String(error)}`);
|
|
108
109
|
}
|
|
109
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentence-transformers-embeddings.js","sourceRoot":"","sources":["../../../src/tools/documentation/sentence-transformers-embeddings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,OAAO,8BAA8B;IAMzC,YAAY,UAAkC,EAAE;QALxC,UAAK,GAAQ,IAAI,CAAC;QAElB,kBAAa,GAAY,KAAK,CAAC;QAC/B,iBAAY,GAAQ,IAAI,CAAC;QAG/B,2CAA2C;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,yBAAyB,CAAC;IAClE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,IAAI,QAAQ,CACrC,uCAAuC,CACxC,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,
|
|
1
|
+
{"version":3,"file":"sentence-transformers-embeddings.js","sourceRoot":"","sources":["../../../src/tools/documentation/sentence-transformers-embeddings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,GAAG,MAAM,0BAA0B,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,8BAA8B;IAMzC,YAAY,UAAkC,EAAE;QALxC,UAAK,GAAQ,IAAI,CAAC;QAElB,kBAAa,GAAY,KAAK,CAAC;QAC/B,iBAAY,GAAQ,IAAI,CAAC;QAG/B,2CAA2C;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,yBAAyB,CAAC;IAClE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,IAAI,QAAQ,CACrC,uCAAuC,CACxC,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEpC,GAAG,CAAC,IAAI,CAAC,6CAA6C,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3C,oBAAoB,EACpB,IAAI,CAAC,SAAS,CACf,CAAC;YACF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,GAAG,CAAC,IAAI,CACN,yDAAyD,IAAI,CAAC,SAAS,EAAE,CAC1E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;YACpE,MAAM,IAAI,KAAK,CACb,qDAAqD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9G,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBACpC,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,0BAA0B;YAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAa,CAAC;YACvD,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,IAAI,KAAK,CACb,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,KAAe;QAClC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAe,EAAE,CAAC;YAElC,kDAAkD;YAClD,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;gBAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;wBACpC,OAAO,EAAE,MAAM;wBACf,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;oBACH,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAa,CAAC;oBACtD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,CAAC;gBAED,iCAAiC;gBACjC,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;oBAC7B,GAAG,CAAC,IAAI,CACN,aAAa,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,YAAY,CAC/E,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,2CAA2C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACpG,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|