@minded-ai/mindedjs 2.0.39-beta.3 → 2.0.39-beta.5

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/dist/index.d.ts CHANGED
@@ -38,4 +38,5 @@ export { createBrowserSession, destroyBrowserSession } from './browserTask/execu
38
38
  export { withBrowserSession } from './toolsLibrary/withBrowserSession';
39
39
  export { BrowserTaskMode } from './browserTask/types';
40
40
  export { LLMDebugCallbackHandler } from './debugging';
41
+ export { resolveCaptcha } from './toolsLibrary/resolveCaptcha';
41
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.LLMDebugCallbackHandler = exports.BrowserTaskMode = exports.withBrowserSession = exports.destroyBrowserSession = exports.createBrowserSession = exports.AnalyticsEventName = exports.AgentEvents = exports.createExtractor = exports.extract = exports.multiClassify = exports.createClassifier = exports.classify = exports.toolsLibrary = exports.zendesk = exports.Environment = exports.SessionType = exports.extractFromDocument = exports.DocumentProcessor = exports.ToolType = exports.RpaActionType = exports.KnownTriggerNames = exports.AppNodeMetadataType = exports.EdgeType = exports.TriggerType = exports.NodeType = exports.createParallelWrapper = exports.MindedChatOpenAI = exports.trackAnalyticsEvent = exports.mindedConnectionSocketMessageType = exports.escalateVoiceCall = exports.retellGetCall = exports.retellCall = exports.onTimer = exports.cancelTimer = exports.resetTimer = exports.sendPlaceholderMessage = exports.logger = exports.events = exports.Agent = void 0;
39
+ exports.resolveCaptcha = exports.LLMDebugCallbackHandler = exports.BrowserTaskMode = exports.withBrowserSession = exports.destroyBrowserSession = exports.createBrowserSession = exports.AnalyticsEventName = exports.AgentEvents = exports.createExtractor = exports.extract = exports.multiClassify = exports.createClassifier = exports.classify = exports.toolsLibrary = exports.zendesk = exports.Environment = exports.SessionType = exports.extractFromDocument = exports.DocumentProcessor = exports.ToolType = exports.RpaActionType = exports.KnownTriggerNames = exports.AppNodeMetadataType = exports.EdgeType = exports.TriggerType = exports.NodeType = exports.createParallelWrapper = exports.MindedChatOpenAI = exports.trackAnalyticsEvent = exports.mindedConnectionSocketMessageType = exports.escalateVoiceCall = exports.retellGetCall = exports.retellCall = exports.onTimer = exports.cancelTimer = exports.resetTimer = exports.sendPlaceholderMessage = exports.logger = exports.events = exports.Agent = void 0;
40
40
  const agent_1 = require("./agent");
41
41
  Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return agent_1.Agent; } });
42
42
  const events_1 = __importDefault(require("./events"));
@@ -108,4 +108,6 @@ var types_1 = require("./browserTask/types");
108
108
  Object.defineProperty(exports, "BrowserTaskMode", { enumerable: true, get: function () { return types_1.BrowserTaskMode; } });
109
109
  var debugging_1 = require("./debugging");
110
110
  Object.defineProperty(exports, "LLMDebugCallbackHandler", { enumerable: true, get: function () { return debugging_1.LLMDebugCallbackHandler; } });
111
+ var resolveCaptcha_1 = require("./toolsLibrary/resolveCaptcha");
112
+ Object.defineProperty(exports, "resolveCaptcha", { enumerable: true, get: function () { return resolveCaptcha_1.resolveCaptcha; } });
111
113
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,sDAA8B;AAY5B,iBAZK,gBAAM,CAYL;AAXR,2CAAwC;AAYtC,uFAZO,eAAM,OAYP;AAXR,yFAAsF;AAYpF,uGAZO,+CAAsB,OAYP;AAXxB,iDAAyE;AAYvE,2FAZO,kBAAU,OAYP;AACV,4FAbmB,mBAAW,OAanB;AACX,wFAdgC,eAAO,OAchC;AAbT,yDAAyE;AAcvE,2FAdO,mBAAU,OAcP;AACV,8FAfmB,sBAAa,OAenB;AAdf,+EAA4E;AAe1E,kGAfO,qCAAiB,OAeP;AAdnB,4EAAqF;AAenF,kHAfO,yDAAiC,OAeP;AAdnC,yDAAgE;AAe9D,oGAfO,+BAAmB,OAeP;AAGrB,6BAA6B;AAC7B,uEAAsE;AAA7D,oHAAA,gBAAgB,OAAA;AACzB,qEAA0E;AAAjE,wHAAA,qBAAqB,OAAA;AA4B9B,mDAS6B;AAR3B,uGAAA,QAAQ,OAAA;AACR,0GAAA,WAAW,OAAA;AACX,uGAAA,QAAQ,OAAA;AAER,kHAAA,mBAAmB,OAAA;AAEnB,gHAAA,iBAAiB,OAAA;AACjB,4GAAA,aAAa,OAAA;AAGf,mDAA+C;AAAtC,uGAAA,QAAQ,OAAA;AAEjB,gCAAgC;AAChC,4FAA+G;AAAtG,uHAAA,iBAAiB,OAAA;AAAE,yHAAA,mBAAmB,OAAA;AAO/C,mDAQ6B;AAF3B,0GAAA,WAAW,OAAA;AAIb,yDAAqD;AAA5C,6GAAA,WAAW,OAAA;AAEpB,gDAA+C;AAAtC,kGAAA,OAAO,OAAA;AAEhB,uBAAuB;AACvB,+DAA+C;AAE/C,8BAA8B;AAC9B,wDAAsF;AAA7E,sGAAA,QAAQ,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,2GAAA,aAAa,OAAA;AAGlD,8BAA8B;AAC9B,wDAAqE;AAA5D,qGAAA,OAAO,OAAA;AAAE,6GAAA,eAAe,OAAA;AAGjC,qBAAqB;AACrB,oDAAmD;AAA1C,0GAAA,WAAW,OAAA;AAGpB,yBAAyB;AACzB,2DAA6D;AAApD,qHAAA,kBAAkB,OAAA;AAG3B,uEAA+F;AAAtF,0HAAA,oBAAoB,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AACpD,wEAAuE;AAA9D,wHAAA,kBAAkB,OAAA;AAC3B,6CAAsD;AAA7C,wGAAA,eAAe,OAAA;AACxB,yCAAsD;AAA7C,oHAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,sDAA8B;AAY5B,iBAZK,gBAAM,CAYL;AAXR,2CAAwC;AAYtC,uFAZO,eAAM,OAYP;AAXR,yFAAsF;AAYpF,uGAZO,+CAAsB,OAYP;AAXxB,iDAAyE;AAYvE,2FAZO,kBAAU,OAYP;AACV,4FAbmB,mBAAW,OAanB;AACX,wFAdgC,eAAO,OAchC;AAbT,yDAAyE;AAcvE,2FAdO,mBAAU,OAcP;AACV,8FAfmB,sBAAa,OAenB;AAdf,+EAA4E;AAe1E,kGAfO,qCAAiB,OAeP;AAdnB,4EAAqF;AAenF,kHAfO,yDAAiC,OAeP;AAdnC,yDAAgE;AAe9D,oGAfO,+BAAmB,OAeP;AAGrB,6BAA6B;AAC7B,uEAAsE;AAA7D,oHAAA,gBAAgB,OAAA;AACzB,qEAA0E;AAAjE,wHAAA,qBAAqB,OAAA;AA4B9B,mDAS6B;AAR3B,uGAAA,QAAQ,OAAA;AACR,0GAAA,WAAW,OAAA;AACX,uGAAA,QAAQ,OAAA;AAER,kHAAA,mBAAmB,OAAA;AAEnB,gHAAA,iBAAiB,OAAA;AACjB,4GAAA,aAAa,OAAA;AAGf,mDAA+C;AAAtC,uGAAA,QAAQ,OAAA;AAEjB,gCAAgC;AAChC,4FAA+G;AAAtG,uHAAA,iBAAiB,OAAA;AAAE,yHAAA,mBAAmB,OAAA;AAO/C,mDAQ6B;AAF3B,0GAAA,WAAW,OAAA;AAIb,yDAAqD;AAA5C,6GAAA,WAAW,OAAA;AAEpB,gDAA+C;AAAtC,kGAAA,OAAO,OAAA;AAEhB,uBAAuB;AACvB,+DAA+C;AAE/C,8BAA8B;AAC9B,wDAAsF;AAA7E,sGAAA,QAAQ,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,2GAAA,aAAa,OAAA;AAGlD,8BAA8B;AAC9B,wDAAqE;AAA5D,qGAAA,OAAO,OAAA;AAAE,6GAAA,eAAe,OAAA;AAGjC,qBAAqB;AACrB,oDAAmD;AAA1C,0GAAA,WAAW,OAAA;AAGpB,yBAAyB;AACzB,2DAA6D;AAApD,qHAAA,kBAAkB,OAAA;AAG3B,uEAA+F;AAAtF,0HAAA,oBAAoB,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AACpD,wEAAuE;AAA9D,wHAAA,kBAAkB,OAAA;AAC3B,6CAAsD;AAA7C,wGAAA,eAAe,OAAA;AACxB,yCAAsD;AAA7C,oHAAA,uBAAuB,OAAA;AAChC,gEAA+D;AAAtD,gHAAA,cAAc,OAAA"}
@@ -2,29 +2,20 @@ import { z } from 'zod';
2
2
  import { Tool } from '../types/Tools.types';
3
3
  import { Page } from 'playwright';
4
4
  import { BaseLanguageModel } from '@langchain/core/language_models/base';
5
- declare const captchaResolutionSchema: z.ZodObject<{
6
- solution: z.ZodOptional<z.ZodString>;
7
- isSuccess: z.ZodBoolean;
8
- errorMessage: z.ZodOptional<z.ZodString>;
9
- }, "strip", z.ZodTypeAny, {
10
- isSuccess: boolean;
11
- solution?: string | undefined;
12
- errorMessage?: string | undefined;
13
- }, {
5
+ export type ResolveCaptchaResult = {
6
+ solution?: string;
14
7
  isSuccess: boolean;
15
- solution?: string | undefined;
16
- errorMessage?: string | undefined;
17
- }>;
18
- export type ResolveCaptchaResult = z.infer<typeof captchaResolutionSchema>;
8
+ errorMessage?: string;
9
+ };
19
10
  /**
20
11
  * Utility function to resolve a CAPTCHA by taking a screenshot and analyzing it with an LLM
12
+ * Sends 5 parallel requests and returns the majority result
21
13
  * @param page The Playwright page instance
22
14
  * @param captchaSelector CSS selector, ID, or class name for the CAPTCHA element
23
15
  * @param llm The language model to use for CAPTCHA solving (must be vision-capable)
24
- * @param maxRetries Maximum number of retry attempts (default: 5)
25
16
  * @returns The CAPTCHA resolution result with solution, isSuccess, and optional errorMessage
26
17
  */
27
- export declare function resolveCaptcha(page: Page, captchaSelector: string, llm: BaseLanguageModel, maxRetries?: number): Promise<ResolveCaptchaResult>;
18
+ export declare function resolveCaptcha(page: Page, captchaSelector: string, llm: BaseLanguageModel): Promise<ResolveCaptchaResult>;
28
19
  export declare const schema: z.ZodObject<{
29
20
  captchaSelector: z.ZodString;
30
21
  }, "strip", z.ZodTypeAny, {
@@ -1 +1 @@
1
- {"version":3,"file":"resolveCaptcha.d.ts","sourceRoot":"","sources":["../../src/toolsLibrary/resolveCaptcha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAYzE,QAAA,MAAM,uBAAuB;;;;;;;;;;;;EAI3B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,iBAAiB,EACtB,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,oBAAoB,CAAC,CA2J/B;AAGD,eAAO,MAAM,MAAM;;;;;;EAMjB,CAAC;AAEH,QAAA,MAAM,kBAAkB,EAAE,IAAI,CAAC,OAAO,MAAM,EAAE,GAAG,CA2ChD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"resolveCaptcha.d.ts","sourceRoot":"","sources":["../../src/toolsLibrary/resolveCaptcha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAGzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,oBAAoB,CAAC,CA0H/B;AAGD,eAAO,MAAM,MAAM;;;;;;EAMjB,CAAC;AAEH,QAAA,MAAM,kBAAkB,EAAE,IAAI,CAAC,OAAO,MAAM,EAAE,GAAG,CA2ChD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -5,29 +5,20 @@ exports.resolveCaptcha = resolveCaptcha;
5
5
  const zod_1 = require("zod");
6
6
  const logger_1 = require("../utils/logger");
7
7
  const messages_1 = require("@langchain/core/messages");
8
- function supportsStructuredOutput(llm) {
9
- return 'withStructuredOutput' in llm && typeof llm.withStructuredOutput === 'function';
10
- }
11
- // Schema for CAPTCHA resolution result
12
- const captchaResolutionSchema = zod_1.z.object({
13
- solution: zod_1.z.string().optional().describe('The CAPTCHA solution text (only present if successfully resolved)'),
14
- isSuccess: zod_1.z.boolean().describe('Whether the CAPTCHA was successfully resolved'),
15
- errorMessage: zod_1.z.string().optional().describe('Error message if the CAPTCHA could not be resolved'),
16
- });
17
8
  /**
18
9
  * Utility function to resolve a CAPTCHA by taking a screenshot and analyzing it with an LLM
10
+ * Sends 5 parallel requests and returns the majority result
19
11
  * @param page The Playwright page instance
20
12
  * @param captchaSelector CSS selector, ID, or class name for the CAPTCHA element
21
13
  * @param llm The language model to use for CAPTCHA solving (must be vision-capable)
22
- * @param maxRetries Maximum number of retry attempts (default: 5)
23
14
  * @returns The CAPTCHA resolution result with solution, isSuccess, and optional errorMessage
24
15
  */
25
- async function resolveCaptcha(page, captchaSelector, llm, maxRetries = 5) {
26
- var _a;
16
+ async function resolveCaptcha(page, captchaSelector, llm) {
17
+ const parallelRequests = 5;
27
18
  logger_1.logger.info({
28
19
  message: 'Attempting to resolve CAPTCHA',
29
20
  selector: captchaSelector,
30
- maxRetries,
21
+ parallelRequests,
31
22
  });
32
23
  // Wait for the captcha element to be visible
33
24
  await page.waitForSelector(captchaSelector, { timeout: 10000, state: 'visible' });
@@ -39,12 +30,8 @@ async function resolveCaptcha(page, captchaSelector, llm, maxRetries = 5) {
39
30
  message: 'Captured CAPTCHA screenshot',
40
31
  screenshotSize: screenshotBuffer.length,
41
32
  });
42
- // Retry mechanism
43
- let lastError = null;
44
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
45
- try {
46
- // Create the prompt with the image (matching Python version)
47
- const prompt = `This image contains a CAPTCHA challenge. Please analyze it and provide the solution.
33
+ // Create the prompt with the image
34
+ const prompt = `This image contains a CAPTCHA challenge. Please analyze it and provide the solution.
48
35
 
49
36
  Common CAPTCHA types:
50
37
  1. **Text CAPTCHA**: Distorted letters/numbers - read the exact text
@@ -63,107 +50,76 @@ Respond with ONLY the solution text/answer. Examples:
63
50
  - "HELLO" (for distorted text showing these letters)
64
51
 
65
52
  If the image is unclear or you cannot determine the answer, respond with: "UNCLEAR"`;
66
- const dataUrl = `data:image/jpeg;base64,${imageBase64}`;
67
- const message = new messages_1.HumanMessage({
68
- content: [
69
- {
70
- type: 'text',
71
- text: prompt,
72
- },
73
- {
74
- type: 'image_url',
75
- image_url: {
76
- url: dataUrl,
77
- },
78
- },
79
- ],
80
- });
81
- let result;
82
- // Use structured output if the LLM supports it
83
- if (supportsStructuredOutput(llm)) {
84
- const structuredLLM = llm.withStructuredOutput(captchaResolutionSchema);
85
- result = (await structuredLLM.invoke([message]));
86
- }
87
- else {
88
- // Fallback: parse plain text response
89
- const response = await llm.invoke([message]);
90
- let solution = typeof response.content === 'string' ? response.content.trim() : response.content.toString().trim();
91
- // Remove any quotation marks that might have been included
92
- solution = solution.replace(/^["']|["']$/g, '');
93
- logger_1.logger.info({
94
- message: 'CAPTCHA resolution attempt',
95
- attempt,
96
- maxRetries,
97
- solutionLength: solution.length,
98
- });
99
- // Check if the solution is "UNCLEAR"
100
- if (solution.toUpperCase() === 'UNCLEAR') {
101
- if (attempt < maxRetries) {
102
- logger_1.logger.warn({
103
- message: 'CAPTCHA image unclear, retrying',
104
- attempt,
105
- maxRetries,
106
- });
107
- // Wait a bit before retrying
108
- await new Promise((resolve) => setTimeout(resolve, 1000));
109
- continue;
110
- }
111
- else {
112
- return {
113
- isSuccess: false,
114
- errorMessage: 'Could not determine CAPTCHA solution from image after all retry attempts',
115
- };
116
- }
117
- }
118
- // Success - return the solution
119
- result = {
120
- solution,
121
- isSuccess: true,
122
- };
123
- }
124
- // If using structured output, check if resolution failed
125
- if (!result.isSuccess) {
126
- if (attempt < maxRetries) {
127
- logger_1.logger.warn({
128
- message: 'CAPTCHA resolution failed, retrying',
129
- attempt,
130
- maxRetries,
131
- errorMessage: result.errorMessage,
132
- });
133
- await new Promise((resolve) => setTimeout(resolve, 1000));
134
- continue;
135
- }
136
- else {
137
- return result;
138
- }
139
- }
140
- // Success
141
- logger_1.logger.info({
142
- message: 'CAPTCHA solved successfully',
143
- solutionLength: ((_a = result.solution) === null || _a === void 0 ? void 0 : _a.length) || 0,
144
- attempts: attempt,
145
- });
146
- return result;
53
+ const dataUrl = `data:image/jpeg;base64,${imageBase64}`;
54
+ const message = new messages_1.HumanMessage({
55
+ content: [
56
+ {
57
+ type: 'text',
58
+ text: prompt,
59
+ },
60
+ {
61
+ type: 'image_url',
62
+ image_url: {
63
+ url: dataUrl,
64
+ },
65
+ },
66
+ ],
67
+ });
68
+ // Send 5 parallel requests
69
+ const requests = Array.from({ length: parallelRequests }, async () => {
70
+ try {
71
+ const response = await llm.invoke([message]);
72
+ let solution = typeof response.content === 'string'
73
+ ? response.content.trim()
74
+ : response.content.toString().trim();
75
+ // Remove any quotation marks that might have been included
76
+ solution = solution.replace(/^["']|["']$/g, '');
77
+ return solution;
147
78
  }
148
79
  catch (error) {
149
- lastError = error instanceof Error ? error : new Error(String(error));
150
80
  logger_1.logger.warn({
151
- message: 'CAPTCHA resolution attempt failed',
152
- attempt,
153
- maxRetries,
154
- error: lastError.message,
81
+ message: 'CAPTCHA resolution request failed',
82
+ error: error instanceof Error ? error.message : String(error),
155
83
  });
156
- // If this is not the last attempt, wait and retry
157
- if (attempt < maxRetries) {
158
- await new Promise((resolve) => setTimeout(resolve, 1000));
159
- continue;
160
- }
84
+ return null;
85
+ }
86
+ });
87
+ const results = await Promise.all(requests);
88
+ const validSolutions = results.filter((sol) => sol !== null && sol.toUpperCase() !== 'UNCLEAR');
89
+ if (validSolutions.length === 0) {
90
+ logger_1.logger.warn({
91
+ message: 'All CAPTCHA resolution requests failed or returned UNCLEAR',
92
+ totalRequests: parallelRequests,
93
+ });
94
+ return {
95
+ isSuccess: false,
96
+ errorMessage: 'Could not determine CAPTCHA solution from image',
97
+ };
98
+ }
99
+ // Count occurrences of each solution
100
+ const solutionCounts = new Map();
101
+ for (const solution of validSolutions) {
102
+ solutionCounts.set(solution, (solutionCounts.get(solution) || 0) + 1);
103
+ }
104
+ // Find the solution with the majority (most occurrences)
105
+ let majoritySolution = '';
106
+ let maxCount = 0;
107
+ for (const [solution, count] of solutionCounts.entries()) {
108
+ if (count > maxCount) {
109
+ maxCount = count;
110
+ majoritySolution = solution;
161
111
  }
162
112
  }
163
- // All retries exhausted
113
+ logger_1.logger.info({
114
+ message: 'CAPTCHA solved successfully using majority vote',
115
+ solutionLength: majoritySolution.length,
116
+ majorityCount: maxCount,
117
+ totalValidResponses: validSolutions.length,
118
+ totalRequests: parallelRequests,
119
+ });
164
120
  return {
165
- isSuccess: false,
166
- errorMessage: lastError ? lastError.message : 'CAPTCHA resolution failed after all retry attempts',
121
+ solution: majoritySolution,
122
+ isSuccess: true,
167
123
  };
168
124
  }
169
125
  // Schema for the resolve captcha tool
@@ -1 +1 @@
1
- {"version":3,"file":"resolveCaptcha.js","sourceRoot":"","sources":["../../src/toolsLibrary/resolveCaptcha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveCaptcha.js","sourceRoot":"","sources":["../../src/toolsLibrary/resolveCaptcha.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minded-ai/mindedjs",
3
- "version": "2.0.39-beta.3",
3
+ "version": "2.0.39-beta.5",
4
4
  "description": "MindedJS is a TypeScript library for building agents.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -112,3 +112,4 @@ export { createBrowserSession, destroyBrowserSession } from './browserTask/execu
112
112
  export { withBrowserSession } from './toolsLibrary/withBrowserSession';
113
113
  export { BrowserTaskMode } from './browserTask/types';
114
114
  export { LLMDebugCallbackHandler } from './debugging';
115
+ export { resolveCaptcha } from './toolsLibrary/resolveCaptcha';
@@ -5,42 +5,32 @@ import { HumanMessage } from '@langchain/core/messages';
5
5
  import { Page } from 'playwright';
6
6
  import { BaseLanguageModel } from '@langchain/core/language_models/base';
7
7
 
8
- // Type guard for checking if LLM supports structured output
9
- interface StructuredOutputLLM extends BaseLanguageModel {
10
- withStructuredOutput<T extends z.ZodType>(schema: T): BaseLanguageModel;
11
- }
12
-
13
- function supportsStructuredOutput(llm: BaseLanguageModel): llm is StructuredOutputLLM {
14
- return 'withStructuredOutput' in llm && typeof (llm as any).withStructuredOutput === 'function';
15
- }
16
-
17
8
  // Schema for CAPTCHA resolution result
18
- const captchaResolutionSchema = z.object({
19
- solution: z.string().optional().describe('The CAPTCHA solution text (only present if successfully resolved)'),
20
- isSuccess: z.boolean().describe('Whether the CAPTCHA was successfully resolved'),
21
- errorMessage: z.string().optional().describe('Error message if the CAPTCHA could not be resolved'),
22
- });
23
-
24
- export type ResolveCaptchaResult = z.infer<typeof captchaResolutionSchema>;
9
+ export type ResolveCaptchaResult = {
10
+ solution?: string;
11
+ isSuccess: boolean;
12
+ errorMessage?: string;
13
+ };
25
14
 
26
15
  /**
27
16
  * Utility function to resolve a CAPTCHA by taking a screenshot and analyzing it with an LLM
17
+ * Sends 5 parallel requests and returns the majority result
28
18
  * @param page The Playwright page instance
29
19
  * @param captchaSelector CSS selector, ID, or class name for the CAPTCHA element
30
20
  * @param llm The language model to use for CAPTCHA solving (must be vision-capable)
31
- * @param maxRetries Maximum number of retry attempts (default: 5)
32
21
  * @returns The CAPTCHA resolution result with solution, isSuccess, and optional errorMessage
33
22
  */
34
23
  export async function resolveCaptcha(
35
24
  page: Page,
36
25
  captchaSelector: string,
37
26
  llm: BaseLanguageModel,
38
- maxRetries: number = 5,
39
27
  ): Promise<ResolveCaptchaResult> {
28
+ const parallelRequests = 5;
29
+
40
30
  logger.info({
41
31
  message: 'Attempting to resolve CAPTCHA',
42
32
  selector: captchaSelector,
43
- maxRetries,
33
+ parallelRequests,
44
34
  });
45
35
 
46
36
  // Wait for the captcha element to be visible
@@ -56,13 +46,8 @@ export async function resolveCaptcha(
56
46
  screenshotSize: screenshotBuffer.length,
57
47
  });
58
48
 
59
- // Retry mechanism
60
- let lastError: Error | null = null;
61
-
62
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
63
- try {
64
- // Create the prompt with the image (matching Python version)
65
- const prompt = `This image contains a CAPTCHA challenge. Please analyze it and provide the solution.
49
+ // Create the prompt with the image
50
+ const prompt = `This image contains a CAPTCHA challenge. Please analyze it and provide the solution.
66
51
 
67
52
  Common CAPTCHA types:
68
53
  1. **Text CAPTCHA**: Distorted letters/numbers - read the exact text
@@ -82,114 +67,84 @@ Respond with ONLY the solution text/answer. Examples:
82
67
 
83
68
  If the image is unclear or you cannot determine the answer, respond with: "UNCLEAR"`;
84
69
 
85
- const dataUrl = `data:image/jpeg;base64,${imageBase64}`;
86
- const message = new HumanMessage({
87
- content: [
88
- {
89
- type: 'text',
90
- text: prompt,
91
- },
92
- {
93
- type: 'image_url',
94
- image_url: {
95
- url: dataUrl,
96
- },
97
- },
98
- ],
99
- });
100
-
101
- let result: ResolveCaptchaResult;
102
-
103
- // Use structured output if the LLM supports it
104
- if (supportsStructuredOutput(llm)) {
105
- const structuredLLM = llm.withStructuredOutput(captchaResolutionSchema);
106
- result = (await structuredLLM.invoke([message])) as ResolveCaptchaResult;
107
- } else {
108
- // Fallback: parse plain text response
109
- const response = await llm.invoke([message]);
110
- let solution = typeof response.content === 'string' ? response.content.trim() : response.content.toString().trim();
111
-
112
- // Remove any quotation marks that might have been included
113
- solution = solution.replace(/^["']|["']$/g, '');
114
-
115
- logger.info({
116
- message: 'CAPTCHA resolution attempt',
117
- attempt,
118
- maxRetries,
119
- solutionLength: solution.length,
120
- });
121
-
122
- // Check if the solution is "UNCLEAR"
123
- if (solution.toUpperCase() === 'UNCLEAR') {
124
- if (attempt < maxRetries) {
125
- logger.warn({
126
- message: 'CAPTCHA image unclear, retrying',
127
- attempt,
128
- maxRetries,
129
- });
130
- // Wait a bit before retrying
131
- await new Promise((resolve) => setTimeout(resolve, 1000));
132
- continue;
133
- } else {
134
- return {
135
- isSuccess: false,
136
- errorMessage: 'Could not determine CAPTCHA solution from image after all retry attempts',
137
- };
138
- }
139
- }
140
-
141
- // Success - return the solution
142
- result = {
143
- solution,
144
- isSuccess: true,
145
- };
146
- }
70
+ const dataUrl = `data:image/jpeg;base64,${imageBase64}`;
71
+ const message = new HumanMessage({
72
+ content: [
73
+ {
74
+ type: 'text',
75
+ text: prompt,
76
+ },
77
+ {
78
+ type: 'image_url',
79
+ image_url: {
80
+ url: dataUrl,
81
+ },
82
+ },
83
+ ],
84
+ });
147
85
 
148
- // If using structured output, check if resolution failed
149
- if (!result.isSuccess) {
150
- if (attempt < maxRetries) {
151
- logger.warn({
152
- message: 'CAPTCHA resolution failed, retrying',
153
- attempt,
154
- maxRetries,
155
- errorMessage: result.errorMessage,
156
- });
157
- await new Promise((resolve) => setTimeout(resolve, 1000));
158
- continue;
159
- } else {
160
- return result;
161
- }
162
- }
86
+ // Send 5 parallel requests
87
+ const requests = Array.from({ length: parallelRequests }, async () => {
88
+ try {
89
+ const response = await llm.invoke([message]);
90
+ let solution = typeof response.content === 'string'
91
+ ? response.content.trim()
92
+ : response.content.toString().trim();
163
93
 
164
- // Success
165
- logger.info({
166
- message: 'CAPTCHA solved successfully',
167
- solutionLength: result.solution?.length || 0,
168
- attempts: attempt,
169
- });
94
+ // Remove any quotation marks that might have been included
95
+ solution = solution.replace(/^["']|["']$/g, '');
170
96
 
171
- return result;
97
+ return solution;
172
98
  } catch (error) {
173
- lastError = error instanceof Error ? error : new Error(String(error));
174
99
  logger.warn({
175
- message: 'CAPTCHA resolution attempt failed',
176
- attempt,
177
- maxRetries,
178
- error: lastError.message,
100
+ message: 'CAPTCHA resolution request failed',
101
+ error: error instanceof Error ? error.message : String(error),
179
102
  });
103
+ return null;
104
+ }
105
+ });
180
106
 
181
- // If this is not the last attempt, wait and retry
182
- if (attempt < maxRetries) {
183
- await new Promise((resolve) => setTimeout(resolve, 1000));
184
- continue;
185
- }
107
+ const results = await Promise.all(requests);
108
+ const validSolutions = results.filter((sol): sol is string => sol !== null && sol.toUpperCase() !== 'UNCLEAR');
109
+
110
+ if (validSolutions.length === 0) {
111
+ logger.warn({
112
+ message: 'All CAPTCHA resolution requests failed or returned UNCLEAR',
113
+ totalRequests: parallelRequests,
114
+ });
115
+ return {
116
+ isSuccess: false,
117
+ errorMessage: 'Could not determine CAPTCHA solution from image',
118
+ };
119
+ }
120
+
121
+ // Count occurrences of each solution
122
+ const solutionCounts = new Map<string, number>();
123
+ for (const solution of validSolutions) {
124
+ solutionCounts.set(solution, (solutionCounts.get(solution) || 0) + 1);
125
+ }
126
+
127
+ // Find the solution with the majority (most occurrences)
128
+ let majoritySolution = '';
129
+ let maxCount = 0;
130
+ for (const [solution, count] of solutionCounts.entries()) {
131
+ if (count > maxCount) {
132
+ maxCount = count;
133
+ majoritySolution = solution;
186
134
  }
187
135
  }
188
136
 
189
- // All retries exhausted
137
+ logger.info({
138
+ message: 'CAPTCHA solved successfully using majority vote',
139
+ solutionLength: majoritySolution.length,
140
+ majorityCount: maxCount,
141
+ totalValidResponses: validSolutions.length,
142
+ totalRequests: parallelRequests,
143
+ });
144
+
190
145
  return {
191
- isSuccess: false,
192
- errorMessage: lastError ? lastError.message : 'CAPTCHA resolution failed after all retry attempts',
146
+ solution: majoritySolution,
147
+ isSuccess: true,
193
148
  };
194
149
  }
195
150