@minded-ai/mindedjs 2.0.13-beta.9 → 2.0.14-beta-1
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/agent.d.ts.map +1 -1
- package/dist/agent.js +16 -6
- package/dist/agent.js.map +1 -1
- package/dist/browserTask/README.md +419 -0
- package/dist/browserTask/browserAgent.py +632 -0
- package/dist/browserTask/captcha_isolated.png +0 -0
- package/dist/browserTask/executeBrowserTask.d.ts +2 -2
- package/dist/browserTask/executeBrowserTask.d.ts.map +1 -1
- package/dist/browserTask/executeBrowserTask.js +7 -28
- package/dist/browserTask/executeBrowserTask.js.map +1 -1
- package/dist/browserTask/executeBrowserTask.ts +79 -0
- package/dist/browserTask/requirements.txt +8 -0
- package/dist/browserTask/setup.sh +144 -0
- package/dist/cli/index.js +7 -35
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lambdaHandlerTemplate.d.ts.map +1 -1
- package/dist/cli/lambdaHandlerTemplate.js +2 -1
- package/dist/cli/lambdaHandlerTemplate.js.map +1 -1
- package/dist/cli/lambdaHandlerTemplate.ts +3 -2
- package/dist/internalTools/retell.js +17 -7
- package/dist/internalTools/retell.js.map +1 -1
- package/dist/internalTools/sendPlaceholderMessage.js +17 -7
- package/dist/internalTools/sendPlaceholderMessage.js.map +1 -1
- package/dist/nodes/addBrowserTaskNode.js +2 -2
- package/dist/nodes/addBrowserTaskNode.js.map +1 -1
- package/dist/nodes/addBrowserTaskRunNode.d.ts.map +1 -1
- package/dist/nodes/addBrowserTaskRunNode.js +4 -1
- package/dist/nodes/addBrowserTaskRunNode.js.map +1 -1
- package/dist/toolsLibrary/classifier.d.ts.map +1 -1
- package/dist/toolsLibrary/classifier.js +103 -33
- package/dist/toolsLibrary/classifier.js.map +1 -1
- package/dist/types/LLM.types.js.map +1 -1
- package/dist/utils/extractStateMemoryResponse.d.ts +4 -0
- package/dist/utils/extractStateMemoryResponse.d.ts.map +1 -1
- package/dist/utils/extractStateMemoryResponse.js +89 -87
- package/dist/utils/extractStateMemoryResponse.js.map +1 -1
- package/package.json +1 -1
- package/src/agent.ts +15 -6
- package/src/browserTask/executeBrowserTask.ts +22 -47
- package/src/cli/index.ts +7 -34
- package/src/cli/lambdaHandlerTemplate.ts +3 -2
- package/src/nodes/addBrowserTaskNode.ts +2 -2
- package/src/nodes/addBrowserTaskRunNode.ts +5 -1
- package/src/toolsLibrary/classifier.ts +115 -37
- package/src/types/LLM.types.ts +2 -2
- package/dist/cli/localOperatorSetup.d.ts +0 -6
- package/dist/cli/localOperatorSetup.d.ts.map +0 -1
- package/dist/cli/localOperatorSetup.js +0 -300
- package/dist/cli/localOperatorSetup.js.map +0 -1
- package/dist/guidelines/guidelinesManager.d.ts +0 -37
- package/dist/guidelines/guidelinesManager.d.ts.map +0 -1
- package/dist/guidelines/guidelinesManager.js +0 -172
- package/dist/guidelines/guidelinesManager.js.map +0 -1
- package/dist/internalTools/documentExtraction.d.ts +0 -69
- package/dist/internalTools/documentExtraction.d.ts.map +0 -1
- package/dist/internalTools/documentExtraction.js +0 -65
- package/dist/internalTools/documentExtraction.js.map +0 -1
- package/dist/internalTools/managedDocumentParser/managedDocumentParser.d.ts +0 -10
- package/dist/internalTools/managedDocumentParser/managedDocumentParser.d.ts.map +0 -1
- package/dist/internalTools/managedDocumentParser/managedDocumentParser.js +0 -80
- package/dist/internalTools/managedDocumentParser/managedDocumentParser.js.map +0 -1
- package/dist/pii-gateway/gateway.d.ts +0 -17
- package/dist/pii-gateway/gateway.d.ts.map +0 -1
- package/dist/pii-gateway/gateway.js +0 -77
- package/dist/pii-gateway/gateway.js.map +0 -1
- package/dist/pii-gateway/index.d.ts +0 -4
- package/dist/pii-gateway/index.d.ts.map +0 -1
- package/dist/pii-gateway/index.js +0 -14
- package/dist/pii-gateway/index.js.map +0 -1
- package/dist/pii-gateway/proxy.d.ts +0 -80
- package/dist/pii-gateway/proxy.d.ts.map +0 -1
- package/dist/pii-gateway/proxy.js +0 -106
- package/dist/pii-gateway/proxy.js.map +0 -1
- package/dist/pii-gateway/types.d.ts +0 -27
- package/dist/pii-gateway/types.d.ts.map +0 -1
- package/dist/pii-gateway/types.js +0 -3
- package/dist/pii-gateway/types.js.map +0 -1
- package/dist/platform/mindedChatOpenAI.d.ts +0 -5
- package/dist/platform/mindedChatOpenAI.d.ts.map +0 -1
- package/dist/platform/mindedChatOpenAI.js +0 -23
- package/dist/platform/mindedChatOpenAI.js.map +0 -1
- package/dist/platform/mindedUtils.d.ts +0 -1
- package/dist/platform/mindedUtils.d.ts.map +0 -1
- package/dist/platform/mindedUtils.js +0 -2
- package/dist/platform/mindedUtils.js.map +0 -1
- package/dist/platform/parallelAzureChatOpenAI.d.ts +0 -39
- package/dist/platform/parallelAzureChatOpenAI.d.ts.map +0 -1
- package/dist/platform/parallelAzureChatOpenAI.js +0 -114
- package/dist/platform/parallelAzureChatOpenAI.js.map +0 -1
- package/dist/platform/parallelChatOpenAI.d.ts +0 -38
- package/dist/platform/parallelChatOpenAI.d.ts.map +0 -1
- package/dist/platform/parallelChatOpenAI.js +0 -111
- package/dist/platform/parallelChatOpenAI.js.map +0 -1
- package/dist/platform/parallelMindedChatOpenAI.d.ts +0 -39
- package/dist/platform/parallelMindedChatOpenAI.d.ts.map +0 -1
- package/dist/platform/parallelMindedChatOpenAI.js +0 -111
- package/dist/platform/parallelMindedChatOpenAI.js.map +0 -1
- package/dist/platform/piiGateway/proxy.d.ts +0 -20
- package/dist/platform/piiGateway/proxy.d.ts.map +0 -1
- package/dist/platform/piiGateway/proxy.js +0 -24
- package/dist/platform/piiGateway/proxy.js.map +0 -1
- package/dist/toolsLibrary/browser/extraction.d.ts +0 -83
- package/dist/toolsLibrary/browser/extraction.d.ts.map +0 -1
- package/dist/toolsLibrary/browser/extraction.js +0 -328
- package/dist/toolsLibrary/browser/extraction.js.map +0 -1
- package/dist/types/Agent.d.ts +0 -2
- package/dist/types/Agent.d.ts.map +0 -1
- package/dist/types/Agent.js +0 -18
- package/dist/types/Agent.js.map +0 -1
- package/dist/types/Flows.d.ts +0 -2
- package/dist/types/Flows.d.ts.map +0 -1
- package/dist/types/Flows.js +0 -18
- package/dist/types/Flows.js.map +0 -1
- package/dist/types/LLM.d.ts +0 -2
- package/dist/types/LLM.d.ts.map +0 -1
- package/dist/types/LLM.js +0 -18
- package/dist/types/LLM.js.map +0 -1
- package/dist/types/LangGraph.d.ts +0 -2
- package/dist/types/LangGraph.d.ts.map +0 -1
- package/dist/types/LangGraph.js +0 -18
- package/dist/types/LangGraph.js.map +0 -1
- package/dist/types/Platform.d.ts +0 -2
- package/dist/types/Platform.d.ts.map +0 -1
- package/dist/types/Platform.js +0 -18
- package/dist/types/Platform.js.map +0 -1
- package/dist/types/Tools.d.ts +0 -2
- package/dist/types/Tools.d.ts.map +0 -1
- package/dist/types/Tools.js +0 -18
- package/dist/types/Tools.js.map +0 -1
- package/dist/types/Triggers.d.ts +0 -2
- package/dist/types/Triggers.d.ts.map +0 -1
- package/dist/types/Triggers.js +0 -18
- package/dist/types/Triggers.js.map +0 -1
- package/dist/types/Triggers.types.d.ts +0 -25
- package/dist/types/Triggers.types.d.ts.map +0 -1
- package/dist/types/Triggers.types.js +0 -3
- package/dist/types/Triggers.types.js.map +0 -1
- package/dist/types/Voice.d.ts +0 -2
- package/dist/types/Voice.d.ts.map +0 -1
- package/dist/types/Voice.js +0 -18
- package/dist/types/Voice.js.map +0 -1
- package/dist/types/index.d.ts +0 -9
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -25
- package/dist/types/index.js.map +0 -1
- package/dist/utils/LogicalConditionDebugger.d.ts +0 -57
- package/dist/utils/LogicalConditionDebugger.d.ts.map +0 -1
- package/dist/utils/LogicalConditionDebugger.js +0 -143
- package/dist/utils/LogicalConditionDebugger.js.map +0 -1
- package/dist/utils/documentProcessor.d.ts +0 -87
- package/dist/utils/documentProcessor.d.ts.map +0 -1
- package/dist/utils/documentProcessor.js +0 -726
- package/dist/utils/documentProcessor.js.map +0 -1
- package/dist/utils/extractToolGuidelineParams.d.ts +0 -4
- package/dist/utils/extractToolGuidelineParams.d.ts.map +0 -1
- package/dist/utils/extractToolGuidelineParams.js +0 -20
- package/dist/utils/extractToolGuidelineParams.js.map +0 -1
- package/dist/utils/extractToolMemoryResponse.d.ts +0 -4
- package/dist/utils/extractToolMemoryResponse.d.ts.map +0 -1
- package/dist/utils/extractToolMemoryResponse.js +0 -16
- package/dist/utils/extractToolMemoryResponse.js.map +0 -1
- package/dist/utils/parseAttachments.d.ts +0 -14
- package/dist/utils/parseAttachments.d.ts.map +0 -1
- package/dist/utils/parseAttachments.js +0 -54
- package/dist/utils/parseAttachments.js.map +0 -1
- package/src/cli/localOperatorSetup.ts +0 -308
- package/src/toolsLibrary/browser/extraction.ts +0 -393
package/src/cli/index.ts
CHANGED
|
@@ -4,7 +4,6 @@ import * as fs from 'fs';
|
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import { logger } from '../utils/logger';
|
|
6
6
|
import { execSync } from 'child_process';
|
|
7
|
-
import { setupLocalOperator, isLocalOperatorSetup } from './localOperatorSetup';
|
|
8
7
|
|
|
9
8
|
const ENV_FILE = '.env';
|
|
10
9
|
|
|
@@ -12,7 +11,7 @@ function getEnvFilePath(): string {
|
|
|
12
11
|
return path.join(process.cwd(), ENV_FILE);
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
function setToken(token: string): void {
|
|
16
15
|
const envPath = getEnvFilePath();
|
|
17
16
|
const tokenLine = `MINDED_CONNECTION_TOKEN=${token}`;
|
|
18
17
|
|
|
@@ -20,7 +19,7 @@ async function setToken(token: string, useLocalOperator: boolean = false): Promi
|
|
|
20
19
|
if (!fs.existsSync(envPath)) {
|
|
21
20
|
// Create .env file with the token
|
|
22
21
|
fs.writeFileSync(envPath, tokenLine + '\n');
|
|
23
|
-
|
|
22
|
+
logger.info({ msg: `Created ${envPath} and added token` });
|
|
24
23
|
} else {
|
|
25
24
|
// Read existing .env file
|
|
26
25
|
const envContent = fs.readFileSync(envPath, 'utf8');
|
|
@@ -30,7 +29,7 @@ async function setToken(token: string, useLocalOperator: boolean = false): Promi
|
|
|
30
29
|
// Replace existing token
|
|
31
30
|
const updatedContent = envContent.replace(/MINDED_CONNECTION_TOKEN=.*/, tokenLine);
|
|
32
31
|
fs.writeFileSync(envPath, updatedContent);
|
|
33
|
-
|
|
32
|
+
logger.info({ msg: `Updated MINDED_CONNECTION_TOKEN in ${envPath}` });
|
|
34
33
|
} else {
|
|
35
34
|
// Append token to existing file
|
|
36
35
|
const newContent = envContent.endsWith('\n') ? envContent + tokenLine + '\n' : envContent + '\n' + tokenLine + '\n';
|
|
@@ -38,12 +37,6 @@ async function setToken(token: string, useLocalOperator: boolean = false): Promi
|
|
|
38
37
|
logger.info({ msg: `Added MINDED_CONNECTION_TOKEN to ${envPath}` });
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
// Handle local operator setup if requested
|
|
43
|
-
if (useLocalOperator) {
|
|
44
|
-
console.info('Setting up local browser operator...');
|
|
45
|
-
await setupLocalOperator();
|
|
46
|
-
}
|
|
47
40
|
}
|
|
48
41
|
|
|
49
42
|
function generateLambdaHandler(): void {
|
|
@@ -155,7 +148,7 @@ function generateLambdaHandler(): void {
|
|
|
155
148
|
}
|
|
156
149
|
}
|
|
157
150
|
|
|
158
|
-
|
|
151
|
+
function main() {
|
|
159
152
|
const args = process.argv.slice(2);
|
|
160
153
|
const command = args[0];
|
|
161
154
|
|
|
@@ -165,33 +158,13 @@ async function main() {
|
|
|
165
158
|
logger.error({ msg: 'Please provide a token' });
|
|
166
159
|
process.exit(1);
|
|
167
160
|
}
|
|
168
|
-
|
|
169
|
-
// Check for --use-local-operator flag
|
|
170
|
-
const useLocalOperator = args.includes('--use-local-operator');
|
|
171
|
-
await setToken(token, useLocalOperator);
|
|
172
|
-
} else if (command === 'setup-local-operator') {
|
|
173
|
-
// Standalone command to setup local operator
|
|
174
|
-
const skipPrompt = args.includes('--yes') || args.includes('-y');
|
|
175
|
-
await setupLocalOperator(skipPrompt);
|
|
161
|
+
setToken(token);
|
|
176
162
|
} else if (command === 'generate-lambda-ts-handler') {
|
|
177
163
|
generateLambdaHandler();
|
|
178
|
-
} else if (command === 'check-local-operator') {
|
|
179
|
-
// Command to check if local operator is set up
|
|
180
|
-
if (isLocalOperatorSetup()) {
|
|
181
|
-
console.info('✓ Local operator is set up and ready');
|
|
182
|
-
} else {
|
|
183
|
-
console.info('✗ Local operator is not set up. Run: npx minded setup-local-operator');
|
|
184
|
-
process.exit(1);
|
|
185
|
-
}
|
|
186
164
|
} else {
|
|
187
|
-
logger.error({
|
|
188
|
-
msg: 'Unknown command. Available commands: token, setup-local-operator, check-local-operator, generate-lambda-ts-handler',
|
|
189
|
-
});
|
|
165
|
+
logger.error({ msg: 'Unknown command. Available commands: token, generate-lambda-ts-handler' });
|
|
190
166
|
process.exit(1);
|
|
191
167
|
}
|
|
192
168
|
}
|
|
193
169
|
|
|
194
|
-
main()
|
|
195
|
-
logger.error({ message: 'Command failed', error });
|
|
196
|
-
process.exit(1);
|
|
197
|
-
});
|
|
170
|
+
main();
|
|
@@ -49,7 +49,7 @@ export const handler = async (event: any, context: any) => {
|
|
|
49
49
|
},
|
|
50
50
|
body: JSON.stringify(responseBody),
|
|
51
51
|
};
|
|
52
|
-
} catch (err) {
|
|
52
|
+
} catch (err: any) {
|
|
53
53
|
logger.error({
|
|
54
54
|
msg: 'Lambda runtime error',
|
|
55
55
|
err,
|
|
@@ -66,7 +66,8 @@ export const handler = async (event: any, context: any) => {
|
|
|
66
66
|
},
|
|
67
67
|
body: JSON.stringify({
|
|
68
68
|
error: 'Lambda runtime error',
|
|
69
|
-
err,
|
|
69
|
+
errorMessage: err.message,
|
|
70
|
+
errorStack: err.stack,
|
|
70
71
|
requestId: context.requestId,
|
|
71
72
|
functionName: context.functionName,
|
|
72
73
|
}),
|
|
@@ -39,7 +39,7 @@ export const addBrowserTaskNode = async ({ graph, node, agent, llm }: AddBrowser
|
|
|
39
39
|
|
|
40
40
|
const combinedPlaybooks = combinePlaybooks(agent.playbooks);
|
|
41
41
|
if (combinedPlaybooks) {
|
|
42
|
-
const compiledPrompt = compilePrompt(combinedPlaybooks, { state: state, memory: state.memory
|
|
42
|
+
const compiledPrompt = compilePrompt(combinedPlaybooks, { state: state, memory: state.memory });
|
|
43
43
|
const systemMessage = new SystemMessage(compiledPrompt);
|
|
44
44
|
if (state.messages.length === 0 || state.messages[0].getType() === 'system') {
|
|
45
45
|
state.messages[0] = systemMessage;
|
|
@@ -68,7 +68,7 @@ export const addBrowserTaskNode = async ({ graph, node, agent, llm }: AddBrowser
|
|
|
68
68
|
};
|
|
69
69
|
|
|
70
70
|
// Compile the prompt with parameters
|
|
71
|
-
const compiledPrompt = compilePrompt(node.prompt, { ...promptParams
|
|
71
|
+
const compiledPrompt = compilePrompt(node.prompt, { ...promptParams });
|
|
72
72
|
|
|
73
73
|
// Build the full prompt with compiled content
|
|
74
74
|
const fullPrompt = `
|
|
@@ -10,6 +10,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
10
10
|
import { invokeBrowserTask } from '../browserTask/executeBrowserTask';
|
|
11
11
|
import { zodSchemaToParams } from '../platform/utils/tools';
|
|
12
12
|
import { getConfig } from '../platform/config';
|
|
13
|
+
import { compilePrompt } from './compilePrompt';
|
|
13
14
|
|
|
14
15
|
type AddBrowserTaskRunNodeParams = {
|
|
15
16
|
graph: PreCompiledGraph;
|
|
@@ -50,12 +51,15 @@ export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedTo
|
|
|
50
51
|
inputParams: zodSchemaToParams(tool.input),
|
|
51
52
|
}));
|
|
52
53
|
|
|
54
|
+
// We compile the env variables to avoid having to pass them to the platform in the tool input
|
|
55
|
+
const promptCompiledWithEnv = compilePrompt(prompt, { env: process.env });
|
|
56
|
+
|
|
53
57
|
const { browserTaskMode } = getConfig();
|
|
54
58
|
// Invoke browser task via socket
|
|
55
59
|
const result = await invokeBrowserTask({
|
|
56
60
|
sessionId,
|
|
57
61
|
cdpUrl,
|
|
58
|
-
task:
|
|
62
|
+
task: promptCompiledWithEnv,
|
|
59
63
|
keepAlive,
|
|
60
64
|
hooks,
|
|
61
65
|
browserTaskMode,
|
|
@@ -35,6 +35,34 @@ const DEFAULT_CONFIG: Partial<ClassifierConfig> = {
|
|
|
35
35
|
defaultReason: 'Unable to determine classification',
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Validates the classification result
|
|
40
|
+
* @param result The classification result to validate
|
|
41
|
+
* @param config The classifier configuration
|
|
42
|
+
* @returns True if the result is valid, false otherwise
|
|
43
|
+
*/
|
|
44
|
+
function validateClassificationResult(result: ClassificationResult, config: ClassifierConfig): boolean {
|
|
45
|
+
// Check if result exists and has a class property
|
|
46
|
+
if (!result || !result.class) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Check if the class is one of the configured classes
|
|
51
|
+
const validClasses = config.classes.map((c) => c.name);
|
|
52
|
+
if (!validClasses.includes(result.class)) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// If we expect JSON format with confidence, validate it
|
|
57
|
+
if (config.outputFormat === 'json' && result.confidence !== undefined) {
|
|
58
|
+
if (typeof result.confidence !== 'number' || result.confidence < 0 || result.confidence > 1) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
|
|
38
66
|
/**
|
|
39
67
|
* Generic classifier utility that can be used standalone
|
|
40
68
|
* @param content The content to classify
|
|
@@ -44,48 +72,98 @@ const DEFAULT_CONFIG: Partial<ClassifierConfig> = {
|
|
|
44
72
|
*/
|
|
45
73
|
export async function classify(content: string, config: ClassifierConfig, llm: BaseLanguageModel): Promise<ClassificationResult> {
|
|
46
74
|
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
75
|
+
const MAX_RETRIES = 3;
|
|
76
|
+
let lastError: Error | null = null;
|
|
77
|
+
let lastInvalidResult: ClassificationResult | null = null;
|
|
47
78
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
79
|
+
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
|
|
80
|
+
try {
|
|
81
|
+
// Build the classification prompt
|
|
82
|
+
const classesDescription = mergedConfig.classes.map((c) => `${c.name}: ${c.description}`).join('\n');
|
|
83
|
+
const validClassNames = mergedConfig.classes.map((c) => c.name);
|
|
84
|
+
|
|
85
|
+
const basePrompt =
|
|
86
|
+
mergedConfig.systemPrompt ||
|
|
87
|
+
'You are a classifier. Your task is to classify the given content into one of the following categories:';
|
|
88
|
+
|
|
89
|
+
let prompt = `${basePrompt}\n\n${classesDescription}\n\n`;
|
|
90
|
+
|
|
91
|
+
// Add retry feedback if this is not the first attempt
|
|
92
|
+
if (attempt > 1 && lastInvalidResult) {
|
|
93
|
+
prompt += `\n⚠️ IMPORTANT: Your previous classification attempt was INVALID. `;
|
|
94
|
+
if (lastInvalidResult.class && !validClassNames.includes(lastInvalidResult.class)) {
|
|
95
|
+
prompt += `You selected "${lastInvalidResult.class}" which is NOT in the list of valid classes. `;
|
|
96
|
+
} else if (!lastInvalidResult.class) {
|
|
97
|
+
prompt += `You did not provide a class value. `;
|
|
98
|
+
}
|
|
99
|
+
prompt += `You MUST select ONLY from these valid classes:\n${validClassNames.join(', ')}\n\n`;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (mergedConfig.outputFormat === 'json') {
|
|
103
|
+
prompt += `You should output the result in the following JSON format: {
|
|
104
|
+
"class": "<selected class name>",
|
|
105
|
+
${mergedConfig.includeReason ? '"reason": "<explanation for the classification>",' : ''}
|
|
106
|
+
"confidence": <confidence score between 0 and 1>
|
|
107
|
+
}.\nReturn JSON and nothing more.`;
|
|
108
|
+
} else {
|
|
109
|
+
prompt += 'Return only the class name.';
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
prompt += `\n\nContent to classify:\n${content}`;
|
|
113
|
+
|
|
114
|
+
// Make the classification request
|
|
115
|
+
let result: ClassificationResult;
|
|
116
|
+
if (mergedConfig.outputFormat === 'json') {
|
|
117
|
+
const parser = new JsonOutputParser();
|
|
118
|
+
const parsedResult = await llm.pipe(parser).invoke([new SystemMessage(prompt)]);
|
|
119
|
+
result = parsedResult as ClassificationResult;
|
|
120
|
+
} else {
|
|
121
|
+
const llmResult = await llm.invoke([new SystemMessage(prompt)]);
|
|
122
|
+
const classText = typeof llmResult.content === 'string' ? llmResult.content.trim() : '';
|
|
123
|
+
result = { class: classText };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Validate the result
|
|
127
|
+
if (!validateClassificationResult(result, mergedConfig)) {
|
|
128
|
+
lastInvalidResult = result;
|
|
129
|
+
throw new Error(`Invalid classification result: ${JSON.stringify(result)}`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Success - return the valid result
|
|
133
|
+
return result;
|
|
134
|
+
} catch (err) {
|
|
135
|
+
lastError = err as Error;
|
|
136
|
+
logger.warn({
|
|
137
|
+
message: `Classification attempt ${attempt} failed`,
|
|
138
|
+
attempt,
|
|
139
|
+
maxRetries: MAX_RETRIES,
|
|
140
|
+
error: lastError.message,
|
|
141
|
+
invalidResult: lastInvalidResult,
|
|
142
|
+
});
|
|
51
143
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (mergedConfig.outputFormat === 'json') {
|
|
58
|
-
prompt += `You should output the result in the following JSON format: {
|
|
59
|
-
"class": "<selected class name>",
|
|
60
|
-
${mergedConfig.includeReason ? '"reason": "<explanation for the classification>",' : ''}
|
|
61
|
-
"confidence": <confidence score between 0 and 1>
|
|
62
|
-
}.\nReturn JSON and nothing more.`;
|
|
63
|
-
} else {
|
|
64
|
-
prompt += 'Return only the class name.';
|
|
144
|
+
// If this is not the last attempt, continue to retry
|
|
145
|
+
if (attempt < MAX_RETRIES) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
65
148
|
}
|
|
149
|
+
}
|
|
66
150
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const classText = typeof result.content === 'string' ? result.content.trim() : '';
|
|
77
|
-
return { class: classText };
|
|
78
|
-
}
|
|
79
|
-
} catch (err) {
|
|
80
|
-
logger.error({ message: 'Classification failed, using default', err });
|
|
151
|
+
// All retries exhausted - fallback to default
|
|
152
|
+
logger.warn({
|
|
153
|
+
message: 'Classification failed after max retries, using default class',
|
|
154
|
+
maxRetries: MAX_RETRIES,
|
|
155
|
+
lastError: lastError?.message,
|
|
156
|
+
lastInvalidResult,
|
|
157
|
+
defaultClass: mergedConfig.defaultClass,
|
|
158
|
+
defaultReason: mergedConfig.defaultReason,
|
|
159
|
+
});
|
|
81
160
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
161
|
+
// Return default classification
|
|
162
|
+
return {
|
|
163
|
+
class: mergedConfig.defaultClass || 'unknown',
|
|
164
|
+
reason: mergedConfig.defaultReason || `Classification failed after ${MAX_RETRIES} attempts: ${lastError?.message}`,
|
|
165
|
+
confidence: 0,
|
|
166
|
+
};
|
|
89
167
|
}
|
|
90
168
|
|
|
91
169
|
/**
|
package/src/types/LLM.types.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type LLMConfig = {
|
|
|
9
9
|
export type LLMProvider = 'ChatOpenAI' | 'AzureChatOpenAI' | 'MindedChatOpenAI';
|
|
10
10
|
|
|
11
11
|
export const LLMProviders: Record<LLMProvider, any> = {
|
|
12
|
-
ChatOpenAI,
|
|
13
|
-
AzureChatOpenAI,
|
|
12
|
+
ChatOpenAI: ChatOpenAI,
|
|
13
|
+
AzureChatOpenAI: AzureChatOpenAI,
|
|
14
14
|
MindedChatOpenAI,
|
|
15
15
|
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare function isLocalOperatorSetup(): boolean;
|
|
2
|
-
export declare function setupLocalOperator(skipPrompt?: boolean): Promise<void>;
|
|
3
|
-
export declare function validateLocalOperatorSetup(): void;
|
|
4
|
-
export declare function getVenvPath(): string;
|
|
5
|
-
export declare function getVenvBinPath(): string;
|
|
6
|
-
//# sourceMappingURL=localOperatorSetup.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"localOperatorSetup.d.ts","sourceRoot":"","sources":["../../src/cli/localOperatorSetup.ts"],"names":[],"mappings":"AAwCA,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AA+FD,wBAAsB,kBAAkB,CAAC,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJnF;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAMjD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.isLocalOperatorSetup = isLocalOperatorSetup;
|
|
27
|
-
exports.setupLocalOperator = setupLocalOperator;
|
|
28
|
-
exports.validateLocalOperatorSetup = validateLocalOperatorSetup;
|
|
29
|
-
exports.getVenvPath = getVenvPath;
|
|
30
|
-
exports.getVenvBinPath = getVenvBinPath;
|
|
31
|
-
const fs = __importStar(require("fs"));
|
|
32
|
-
const path = __importStar(require("path"));
|
|
33
|
-
const child_process_1 = require("child_process");
|
|
34
|
-
const readline = __importStar(require("readline"));
|
|
35
|
-
const VENV_DIR = '.venv';
|
|
36
|
-
const SETUP_MARKER_FILE = '.minded-local-operator-setup';
|
|
37
|
-
const REQUIRED_PACKAGES = [
|
|
38
|
-
{
|
|
39
|
-
name: 'uv',
|
|
40
|
-
description: 'Python package manager for fast dependency installation',
|
|
41
|
-
command: 'curl -LsSf https://astral.sh/uv/install.sh | sh',
|
|
42
|
-
checkCommand: 'uv --version',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: 'Python 3.12',
|
|
46
|
-
description: 'Python runtime for browser automation',
|
|
47
|
-
command: 'python3.12 --version',
|
|
48
|
-
checkCommand: 'python3.12 --version',
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
name: 'browser-use',
|
|
52
|
-
description: 'Browser automation library',
|
|
53
|
-
command: 'uv pip install browser-use',
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: 'Playwright Chromium',
|
|
57
|
-
description: 'Chromium browser for automation',
|
|
58
|
-
command: 'uvx playwright install chromium --with-deps',
|
|
59
|
-
},
|
|
60
|
-
];
|
|
61
|
-
function isLocalOperatorSetup() {
|
|
62
|
-
const setupMarkerPath = path.join(process.cwd(), SETUP_MARKER_FILE);
|
|
63
|
-
const venvPath = path.join(process.cwd(), VENV_DIR);
|
|
64
|
-
// Check if both the marker file and venv directory exist
|
|
65
|
-
return fs.existsSync(setupMarkerPath) && fs.existsSync(venvPath);
|
|
66
|
-
}
|
|
67
|
-
function checkCommand(command) {
|
|
68
|
-
try {
|
|
69
|
-
(0, child_process_1.execSync)(command, { stdio: 'ignore' });
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
catch (_a) {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function promptUser(question) {
|
|
77
|
-
// Check if we're in an interactive terminal
|
|
78
|
-
if (!process.stdin.isTTY) {
|
|
79
|
-
console.warn('Non-interactive terminal detected, skipping prompt and cancelling installation');
|
|
80
|
-
return Promise.resolve(false);
|
|
81
|
-
}
|
|
82
|
-
return new Promise((resolve) => {
|
|
83
|
-
const rl = readline.createInterface({
|
|
84
|
-
input: process.stdin,
|
|
85
|
-
output: process.stdout,
|
|
86
|
-
});
|
|
87
|
-
// Set a timeout in case the prompt hangs
|
|
88
|
-
const timeout = setTimeout(() => {
|
|
89
|
-
console.warn('Prompt timeout (30s), cancelling installation');
|
|
90
|
-
rl.close();
|
|
91
|
-
resolve(false);
|
|
92
|
-
}, 30000); // 30 second timeout
|
|
93
|
-
console.log('Displaying prompt to user');
|
|
94
|
-
rl.question(question, (answer) => {
|
|
95
|
-
clearTimeout(timeout);
|
|
96
|
-
console.log(`User answered: "${answer}"`);
|
|
97
|
-
rl.close();
|
|
98
|
-
const confirmed = answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
|
|
99
|
-
console.log(`Prompt result: ${confirmed}`);
|
|
100
|
-
resolve(confirmed);
|
|
101
|
-
});
|
|
102
|
-
// Handle potential readline errors
|
|
103
|
-
rl.on('error', (error) => {
|
|
104
|
-
console.error('Readline error, cancelling installation:', error.message);
|
|
105
|
-
clearTimeout(timeout);
|
|
106
|
-
rl.close();
|
|
107
|
-
resolve(false);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
async function runCommand(command, description) {
|
|
112
|
-
return new Promise((resolve, reject) => {
|
|
113
|
-
console.log(`Installing ${description}...`);
|
|
114
|
-
const isComplexCommand = command.includes('|') || command.includes('&&');
|
|
115
|
-
if (isComplexCommand) {
|
|
116
|
-
// For complex commands with pipes or &&, use shell
|
|
117
|
-
const child = (0, child_process_1.spawn)('sh', ['-c', command], {
|
|
118
|
-
stdio: 'inherit',
|
|
119
|
-
shell: true,
|
|
120
|
-
});
|
|
121
|
-
child.on('error', (error) => {
|
|
122
|
-
console.error(`Failed to install ${description}:`, error.message);
|
|
123
|
-
reject(error);
|
|
124
|
-
});
|
|
125
|
-
child.on('close', (code) => {
|
|
126
|
-
if (code === 0) {
|
|
127
|
-
console.log(`✓ ${description} installed successfully`);
|
|
128
|
-
resolve();
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
reject(new Error(`Command exited with code ${code}`));
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
// For simple commands, use execSync
|
|
137
|
-
try {
|
|
138
|
-
(0, child_process_1.execSync)(command, { stdio: 'inherit' });
|
|
139
|
-
console.log(`✓ ${description} installed successfully`);
|
|
140
|
-
resolve();
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
console.error(`Failed to install ${description}:`, error);
|
|
144
|
-
reject(error);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
async function setupLocalOperator(skipPrompt = false) {
|
|
150
|
-
console.log('\n🤖 Minded Local Operator Setup\n');
|
|
151
|
-
// Check if already setup
|
|
152
|
-
if (isLocalOperatorSetup()) {
|
|
153
|
-
console.log('✓ Local operator is already set up');
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
// Display what will be installed
|
|
157
|
-
console.log('The following packages will be installed for local browser automation:\n');
|
|
158
|
-
REQUIRED_PACKAGES.forEach((pkg, index) => {
|
|
159
|
-
console.log(` ${index + 1}. ${pkg.name} - ${pkg.description}`);
|
|
160
|
-
});
|
|
161
|
-
console.log('');
|
|
162
|
-
// Ask for confirmation unless skipped
|
|
163
|
-
if (!skipPrompt) {
|
|
164
|
-
console.log('Waiting for user confirmation...');
|
|
165
|
-
const confirmed = await promptUser('Do you want to proceed with the installation? (y/n): ');
|
|
166
|
-
if (!confirmed) {
|
|
167
|
-
console.log('Installation cancelled by user');
|
|
168
|
-
process.exit(0);
|
|
169
|
-
}
|
|
170
|
-
console.log('User confirmed, proceeding with installation');
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
console.log('Skipping confirmation prompt, proceeding with installation...');
|
|
174
|
-
}
|
|
175
|
-
console.log('\n📦 Starting installation...\n');
|
|
176
|
-
try {
|
|
177
|
-
// Check and install uv if needed
|
|
178
|
-
if (!checkCommand('uv --version')) {
|
|
179
|
-
console.log('Installing uv package manager...');
|
|
180
|
-
await runCommand('curl -LsSf https://astral.sh/uv/install.sh | sh', 'uv');
|
|
181
|
-
// Add uv to PATH for current session
|
|
182
|
-
const uvPath = path.join(process.env.HOME || '', '.cargo', 'bin');
|
|
183
|
-
process.env.PATH = `${uvPath}:${process.env.PATH}`;
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
console.log('✓ uv is already installed');
|
|
187
|
-
}
|
|
188
|
-
// Check Python 3.12
|
|
189
|
-
if (!checkCommand('python3.12 --version')) {
|
|
190
|
-
console.error('Python 3.12 is required but not found');
|
|
191
|
-
console.log('Please install Python 3.12 manually:');
|
|
192
|
-
console.log(' macOS: brew install python@3.12');
|
|
193
|
-
console.log(' Ubuntu/Debian: sudo apt install python3.12');
|
|
194
|
-
console.log(' Or visit: https://www.python.org/downloads/');
|
|
195
|
-
process.exit(1);
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
console.log('✓ Python 3.12 is available');
|
|
199
|
-
}
|
|
200
|
-
// Create virtual environment
|
|
201
|
-
console.log('Creating Python virtual environment...');
|
|
202
|
-
(0, child_process_1.execSync)(`uv venv --python 3.12 ${VENV_DIR}`, { stdio: 'inherit' });
|
|
203
|
-
console.log('✓ Virtual environment created');
|
|
204
|
-
// Install browser-use in the venv
|
|
205
|
-
console.log('Installing browser-use package...');
|
|
206
|
-
(0, child_process_1.execSync)(`uv pip install --python ${path.join(process.cwd(), VENV_DIR, 'bin', 'python')} browser-use`, {
|
|
207
|
-
stdio: 'inherit',
|
|
208
|
-
});
|
|
209
|
-
console.log('✓ browser-use installed');
|
|
210
|
-
// Install Playwright Chromium
|
|
211
|
-
console.log('Installing Playwright Chromium browser...');
|
|
212
|
-
(0, child_process_1.execSync)(`uvx playwright install chromium --with-deps`, { stdio: 'inherit' });
|
|
213
|
-
console.log('✓ Playwright Chromium installed');
|
|
214
|
-
// Create setup marker file
|
|
215
|
-
const setupMarkerPath = path.join(process.cwd(), SETUP_MARKER_FILE);
|
|
216
|
-
const setupInfo = {
|
|
217
|
-
version: '1.0.0',
|
|
218
|
-
setupDate: new Date().toISOString(),
|
|
219
|
-
packages: REQUIRED_PACKAGES.map((p) => p.name),
|
|
220
|
-
venvPath: VENV_DIR,
|
|
221
|
-
};
|
|
222
|
-
fs.writeFileSync(setupMarkerPath, JSON.stringify(setupInfo, null, 2));
|
|
223
|
-
// Add to .gitignore if not already there
|
|
224
|
-
const gitignorePath = path.join(process.cwd(), '.gitignore');
|
|
225
|
-
if (fs.existsSync(gitignorePath)) {
|
|
226
|
-
const gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
|
|
227
|
-
const itemsToIgnore = [VENV_DIR, SETUP_MARKER_FILE, 'downloads/'];
|
|
228
|
-
const linesToAdd = [];
|
|
229
|
-
itemsToIgnore.forEach((item) => {
|
|
230
|
-
if (!gitignoreContent.includes(item)) {
|
|
231
|
-
linesToAdd.push(item);
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
if (linesToAdd.length > 0) {
|
|
235
|
-
const newContent = gitignoreContent.trimEnd() + '\n\n# Minded Local Operator\n' + linesToAdd.join('\n') + '\n';
|
|
236
|
-
fs.writeFileSync(gitignorePath, newContent);
|
|
237
|
-
console.log('✓ Updated .gitignore');
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
// Add BROWSER_TASK_MODE to .env file
|
|
241
|
-
const envPath = path.join(process.cwd(), '.env');
|
|
242
|
-
const browserTaskModeVar = 'BROWSER_TASK_MODE=localRun';
|
|
243
|
-
if (fs.existsSync(envPath)) {
|
|
244
|
-
const envContent = fs.readFileSync(envPath, 'utf8');
|
|
245
|
-
// Check if BROWSER_TASK_MODE is already set
|
|
246
|
-
if (!envContent.includes('BROWSER_TASK_MODE')) {
|
|
247
|
-
// Append to existing .env file
|
|
248
|
-
const newEnvContent = envContent.trimEnd() + '\n' + browserTaskModeVar + '\n';
|
|
249
|
-
fs.writeFileSync(envPath, newEnvContent);
|
|
250
|
-
console.log('✓ Added BROWSER_TASK_MODE=localRun to .env');
|
|
251
|
-
}
|
|
252
|
-
else if (!envContent.includes('BROWSER_TASK_MODE=localRun')) {
|
|
253
|
-
// BROWSER_TASK_MODE exists but with different value, update it
|
|
254
|
-
const updatedEnvContent = envContent.replace(/BROWSER_TASK_MODE=.*$/m, browserTaskModeVar);
|
|
255
|
-
fs.writeFileSync(envPath, updatedEnvContent);
|
|
256
|
-
console.log('✓ Updated BROWSER_TASK_MODE to localRun in .env');
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
console.log('✓ BROWSER_TASK_MODE=localRun already configured in .env');
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
// Create new .env file
|
|
264
|
-
fs.writeFileSync(envPath, browserTaskModeVar + '\n');
|
|
265
|
-
console.log('✓ Created .env file with BROWSER_TASK_MODE=localRun');
|
|
266
|
-
}
|
|
267
|
-
console.log('\n' + '='.repeat(50));
|
|
268
|
-
console.log('✅ Local operator setup completed successfully!');
|
|
269
|
-
console.log('='.repeat(50) + '\n');
|
|
270
|
-
console.log('You can now use browser automation features locally.');
|
|
271
|
-
console.log('The virtual environment will be activated automatically when needed.');
|
|
272
|
-
}
|
|
273
|
-
catch (error) {
|
|
274
|
-
console.error('Setup failed:', error);
|
|
275
|
-
// Clean up partial installation
|
|
276
|
-
try {
|
|
277
|
-
if (fs.existsSync(path.join(process.cwd(), VENV_DIR))) {
|
|
278
|
-
fs.rmSync(path.join(process.cwd(), VENV_DIR), { recursive: true });
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
catch (_a) {
|
|
282
|
-
// Ignore cleanup errors
|
|
283
|
-
}
|
|
284
|
-
process.exit(1);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
function validateLocalOperatorSetup() {
|
|
288
|
-
if (!isLocalOperatorSetup()) {
|
|
289
|
-
console.error('Local operator is not set up');
|
|
290
|
-
console.log('Please run: npx minded setup-local-operator');
|
|
291
|
-
throw new Error('Local operator not configured');
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
function getVenvPath() {
|
|
295
|
-
return path.join(process.cwd(), VENV_DIR);
|
|
296
|
-
}
|
|
297
|
-
function getVenvBinPath() {
|
|
298
|
-
return path.join(getVenvPath(), 'bin');
|
|
299
|
-
}
|
|
300
|
-
//# sourceMappingURL=localOperatorSetup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"localOperatorSetup.js","sourceRoot":"","sources":["../../src/cli/localOperatorSetup.ts"],"names":[],"mappings":"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"}
|