@push.rocks/smartagent 1.7.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/index.d.ts +9 -12
- package/dist_ts/index.js +9 -20
- package/dist_ts/plugins.d.ts +8 -9
- package/dist_ts/plugins.js +10 -12
- package/dist_ts/smartagent.classes.agent.d.ts +2 -0
- package/dist_ts/smartagent.classes.agent.js +173 -0
- package/dist_ts/smartagent.classes.toolregistry.d.ts +12 -0
- package/dist_ts/smartagent.classes.toolregistry.js +17 -0
- package/dist_ts/smartagent.interfaces.d.ts +47 -231
- package/dist_ts/smartagent.interfaces.js +6 -7
- package/dist_ts/smartagent.utils.truncation.d.ts +10 -0
- package/dist_ts/smartagent.utils.truncation.js +26 -0
- package/dist_ts_compaction/index.d.ts +1 -0
- package/dist_ts_compaction/index.js +2 -0
- package/dist_ts_compaction/plugins.d.ts +4 -0
- package/dist_ts_compaction/plugins.js +3 -0
- package/dist_ts_compaction/smartagent.compaction.d.ts +10 -0
- package/dist_ts_compaction/smartagent.compaction.js +46 -0
- package/dist_ts_tools/index.d.ts +8 -0
- package/dist_ts_tools/index.js +6 -0
- package/dist_ts_tools/plugins.d.ts +15 -0
- package/dist_ts_tools/plugins.js +19 -0
- package/dist_ts_tools/tool.filesystem.d.ts +6 -0
- package/dist_ts_tools/tool.filesystem.js +102 -0
- package/dist_ts_tools/tool.http.d.ts +2 -0
- package/dist_ts_tools/tool.http.js +65 -0
- package/dist_ts_tools/tool.json.d.ts +2 -0
- package/dist_ts_tools/tool.json.js +47 -0
- package/dist_ts_tools/tool.shell.d.ts +8 -0
- package/dist_ts_tools/tool.shell.js +40 -0
- package/npmextra.json +1 -1
- package/package.json +30 -18
- package/readme.hints.md +43 -42
- package/readme.md +257 -526
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/index.ts +11 -31
- package/ts/plugins.ts +22 -21
- package/ts/smartagent.classes.agent.ts +198 -0
- package/ts/smartagent.classes.toolregistry.ts +20 -0
- package/ts/smartagent.interfaces.ts +51 -303
- package/ts/smartagent.utils.truncation.ts +39 -0
- package/ts_compaction/index.ts +1 -0
- package/ts_compaction/plugins.ts +6 -0
- package/ts_compaction/smartagent.compaction.ts +51 -0
- package/ts_tools/index.ts +8 -0
- package/ts_tools/plugins.ts +30 -0
- package/ts_tools/tool.filesystem.ts +131 -0
- package/ts_tools/tool.http.ts +78 -0
- package/ts_tools/tool.json.ts +53 -0
- package/ts_tools/tool.shell.ts +62 -0
- package/dist_ts/smartagent.classes.driveragent.d.ts +0 -134
- package/dist_ts/smartagent.classes.driveragent.js +0 -671
- package/dist_ts/smartagent.classes.dualagent.d.ts +0 -79
- package/dist_ts/smartagent.classes.dualagent.js +0 -583
- package/dist_ts/smartagent.classes.guardianagent.d.ts +0 -46
- package/dist_ts/smartagent.classes.guardianagent.js +0 -201
- package/dist_ts/smartagent.tools.base.d.ts +0 -52
- package/dist_ts/smartagent.tools.base.js +0 -42
- package/dist_ts/smartagent.tools.browser.d.ts +0 -17
- package/dist_ts/smartagent.tools.browser.js +0 -229
- package/dist_ts/smartagent.tools.deno.d.ts +0 -21
- package/dist_ts/smartagent.tools.deno.js +0 -191
- package/dist_ts/smartagent.tools.filesystem.d.ts +0 -40
- package/dist_ts/smartagent.tools.filesystem.js +0 -801
- package/dist_ts/smartagent.tools.http.d.ts +0 -16
- package/dist_ts/smartagent.tools.http.js +0 -264
- package/dist_ts/smartagent.tools.json.d.ts +0 -24
- package/dist_ts/smartagent.tools.json.js +0 -202
- package/dist_ts/smartagent.tools.shell.d.ts +0 -17
- package/dist_ts/smartagent.tools.shell.js +0 -202
- package/ts/smartagent.classes.driveragent.ts +0 -775
- package/ts/smartagent.classes.dualagent.ts +0 -657
- package/ts/smartagent.classes.guardianagent.ts +0 -241
- package/ts/smartagent.tools.base.ts +0 -83
- package/ts/smartagent.tools.browser.ts +0 -253
- package/ts/smartagent.tools.deno.ts +0 -230
- package/ts/smartagent.tools.filesystem.ts +0 -885
- package/ts/smartagent.tools.http.ts +0 -283
- package/ts/smartagent.tools.json.ts +0 -224
- package/ts/smartagent.tools.shell.ts +0 -230
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
import * as interfaces from './smartagent.interfaces.js';
|
|
3
|
-
/**
|
|
4
|
-
* GuardianAgent - Evaluates tool call proposals against a policy
|
|
5
|
-
* Uses AI reasoning to approve or reject tool calls
|
|
6
|
-
*/
|
|
7
|
-
export class GuardianAgent {
|
|
8
|
-
provider;
|
|
9
|
-
policyPrompt;
|
|
10
|
-
tools = new Map();
|
|
11
|
-
constructor(provider, policyPrompt) {
|
|
12
|
-
this.provider = provider;
|
|
13
|
-
this.policyPrompt = policyPrompt;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Register a tool for reference during evaluation
|
|
17
|
-
*/
|
|
18
|
-
registerTool(tool) {
|
|
19
|
-
this.tools.set(tool.name, tool);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Evaluate a tool call proposal against the policy
|
|
23
|
-
*/
|
|
24
|
-
async evaluate(proposal, taskContext) {
|
|
25
|
-
// Get the tool to generate a human-readable summary
|
|
26
|
-
const tool = this.tools.get(proposal.toolName);
|
|
27
|
-
let callSummary = `${proposal.toolName}.${proposal.action}(${JSON.stringify(proposal.params)})`;
|
|
28
|
-
if (tool) {
|
|
29
|
-
try {
|
|
30
|
-
callSummary = tool.getCallSummary(proposal.action, proposal.params);
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
// Fallback to basic summary
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// Build the evaluation prompt
|
|
37
|
-
const evaluationPrompt = this.buildEvaluationPrompt(proposal, callSummary, taskContext);
|
|
38
|
-
// Get response from provider
|
|
39
|
-
const response = await this.provider.chat({
|
|
40
|
-
systemMessage: this.buildGuardianSystemMessage(),
|
|
41
|
-
userMessage: evaluationPrompt,
|
|
42
|
-
messageHistory: [],
|
|
43
|
-
});
|
|
44
|
-
// Parse the decision from the response
|
|
45
|
-
return this.parseDecision(response.message, proposal);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Build the system message for the Guardian
|
|
49
|
-
*/
|
|
50
|
-
buildGuardianSystemMessage() {
|
|
51
|
-
return `You are a Guardian AI responsible for evaluating tool call proposals.
|
|
52
|
-
|
|
53
|
-
## Your Role
|
|
54
|
-
You evaluate whether proposed tool calls are safe and aligned with the policy.
|
|
55
|
-
|
|
56
|
-
## Policy to Enforce
|
|
57
|
-
${this.policyPrompt}
|
|
58
|
-
|
|
59
|
-
## Response Format
|
|
60
|
-
For EVERY evaluation, respond with a decision in this exact format:
|
|
61
|
-
|
|
62
|
-
<guardian_decision>
|
|
63
|
-
<decision>approve OR reject</decision>
|
|
64
|
-
<reason>Your detailed explanation</reason>
|
|
65
|
-
<concerns>List any concerns, even if approving</concerns>
|
|
66
|
-
<suggestions>Alternative approaches if rejecting</suggestions>
|
|
67
|
-
</guardian_decision>
|
|
68
|
-
|
|
69
|
-
## Guidelines
|
|
70
|
-
1. Carefully analyze what the tool call will do
|
|
71
|
-
2. Consider security implications
|
|
72
|
-
3. Check against the policy requirements
|
|
73
|
-
4. If uncertain, err on the side of caution (reject)
|
|
74
|
-
5. Provide actionable feedback when rejecting`;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Build the evaluation prompt for a specific proposal
|
|
78
|
-
*/
|
|
79
|
-
buildEvaluationPrompt(proposal, callSummary, taskContext) {
|
|
80
|
-
const toolInfo = this.tools.get(proposal.toolName);
|
|
81
|
-
const toolDescription = toolInfo ? toolInfo.getFullDescription() : 'Unknown tool';
|
|
82
|
-
return `## Task Context
|
|
83
|
-
${taskContext}
|
|
84
|
-
|
|
85
|
-
## Tool Being Used
|
|
86
|
-
${toolDescription}
|
|
87
|
-
|
|
88
|
-
## Proposed Tool Call
|
|
89
|
-
- **Tool**: ${proposal.toolName}
|
|
90
|
-
- **Action**: ${proposal.action}
|
|
91
|
-
- **Parameters**: ${JSON.stringify(proposal.params, null, 2)}
|
|
92
|
-
|
|
93
|
-
## Human-Readable Summary
|
|
94
|
-
${callSummary}
|
|
95
|
-
|
|
96
|
-
## Driver's Reasoning
|
|
97
|
-
${proposal.reasoning || 'No reasoning provided'}
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
Evaluate this tool call against the policy. Should it be approved or rejected?`;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Parse the guardian decision from the response
|
|
105
|
-
*/
|
|
106
|
-
parseDecision(response, proposal) {
|
|
107
|
-
// Try to extract from XML tags
|
|
108
|
-
const decisionMatch = response.match(/<decision>(.*?)<\/decision>/s);
|
|
109
|
-
const reasonMatch = response.match(/<reason>([\s\S]*?)<\/reason>/);
|
|
110
|
-
const concernsMatch = response.match(/<concerns>([\s\S]*?)<\/concerns>/);
|
|
111
|
-
const suggestionsMatch = response.match(/<suggestions>([\s\S]*?)<\/suggestions>/);
|
|
112
|
-
// Determine decision
|
|
113
|
-
let decision = 'reject';
|
|
114
|
-
if (decisionMatch) {
|
|
115
|
-
const decisionText = decisionMatch[1].trim().toLowerCase();
|
|
116
|
-
decision = decisionText.includes('approve') ? 'approve' : 'reject';
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
// Fallback: look for approval keywords in the response
|
|
120
|
-
const lowerResponse = response.toLowerCase();
|
|
121
|
-
if (lowerResponse.includes('approved') ||
|
|
122
|
-
lowerResponse.includes('i approve') ||
|
|
123
|
-
lowerResponse.includes('looks safe')) {
|
|
124
|
-
decision = 'approve';
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Extract reason
|
|
128
|
-
let reason = reasonMatch ? reasonMatch[1].trim() : '';
|
|
129
|
-
if (!reason) {
|
|
130
|
-
// Use the full response as reason if no tag found
|
|
131
|
-
reason = response.substring(0, 500);
|
|
132
|
-
}
|
|
133
|
-
// Extract concerns
|
|
134
|
-
const concerns = [];
|
|
135
|
-
if (concernsMatch) {
|
|
136
|
-
const concernsText = concernsMatch[1].trim();
|
|
137
|
-
if (concernsText && concernsText.toLowerCase() !== 'none') {
|
|
138
|
-
// Split by newlines or bullet points
|
|
139
|
-
const concernLines = concernsText.split(/[\n\r]+/).map(l => l.trim()).filter(l => l);
|
|
140
|
-
concerns.push(...concernLines);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// Extract suggestions
|
|
144
|
-
const suggestions = suggestionsMatch ? suggestionsMatch[1].trim() : undefined;
|
|
145
|
-
return {
|
|
146
|
-
decision,
|
|
147
|
-
reason,
|
|
148
|
-
concerns: concerns.length > 0 ? concerns : undefined,
|
|
149
|
-
suggestions: suggestions && suggestions.toLowerCase() !== 'none' ? suggestions : undefined,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Quick validation without AI (for obviously safe/unsafe operations)
|
|
154
|
-
* Returns null if AI evaluation is needed
|
|
155
|
-
*/
|
|
156
|
-
quickValidate(proposal) {
|
|
157
|
-
// Check if tool exists
|
|
158
|
-
if (!this.tools.has(proposal.toolName)) {
|
|
159
|
-
return {
|
|
160
|
-
decision: 'reject',
|
|
161
|
-
reason: `Unknown tool: ${proposal.toolName}`,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
// Check if action exists
|
|
165
|
-
const tool = this.tools.get(proposal.toolName);
|
|
166
|
-
const validAction = tool.actions.find(a => a.name === proposal.action);
|
|
167
|
-
if (!validAction) {
|
|
168
|
-
return {
|
|
169
|
-
decision: 'reject',
|
|
170
|
-
reason: `Unknown action "${proposal.action}" for tool "${proposal.toolName}". Available actions: ${tool.actions.map(a => a.name).join(', ')}`,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
// Check required parameters
|
|
174
|
-
const schema = validAction.parameters;
|
|
175
|
-
if (schema && schema.required && Array.isArray(schema.required)) {
|
|
176
|
-
for (const requiredParam of schema.required) {
|
|
177
|
-
if (!(requiredParam in proposal.params)) {
|
|
178
|
-
return {
|
|
179
|
-
decision: 'reject',
|
|
180
|
-
reason: `Missing required parameter: ${requiredParam}`,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
// Needs full AI evaluation
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Update the policy prompt
|
|
190
|
-
*/
|
|
191
|
-
setPolicy(policyPrompt) {
|
|
192
|
-
this.policyPrompt = policyPrompt;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Get current policy
|
|
196
|
-
*/
|
|
197
|
-
getPolicy() {
|
|
198
|
-
return this.policyPrompt;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5jbGFzc2VzLmd1YXJkaWFuYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFnZW50LmNsYXNzZXMuZ3VhcmRpYW5hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBR3pEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2hCLFFBQVEsQ0FBa0M7SUFDMUMsWUFBWSxDQUFTO0lBQ3JCLEtBQUssR0FBaUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV4RCxZQUNFLFFBQXlDLEVBQ3pDLFlBQW9CO1FBRXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxJQUFxQjtRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQ25CLFFBQXNDLEVBQ3RDLFdBQW1CO1FBRW5CLG9EQUFvRDtRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxXQUFXLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUVoRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDO2dCQUNILFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FB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
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import * as interfaces from './smartagent.interfaces.js';
|
|
2
|
-
/**
|
|
3
|
-
* Abstract base class for tool wrappers
|
|
4
|
-
* All tool implementations should extend this class
|
|
5
|
-
*/
|
|
6
|
-
export declare abstract class BaseToolWrapper implements interfaces.IAgentToolWrapper {
|
|
7
|
-
abstract name: string;
|
|
8
|
-
abstract description: string;
|
|
9
|
-
abstract actions: interfaces.IToolAction[];
|
|
10
|
-
protected isInitialized: boolean;
|
|
11
|
-
/**
|
|
12
|
-
* Initialize the tool and any required resources
|
|
13
|
-
*/
|
|
14
|
-
abstract initialize(): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Cleanup any resources used by the tool
|
|
17
|
-
*/
|
|
18
|
-
abstract cleanup(): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Execute an action with the given parameters
|
|
21
|
-
*/
|
|
22
|
-
abstract execute(action: string, params: Record<string, unknown>): Promise<interfaces.IToolExecutionResult>;
|
|
23
|
-
/**
|
|
24
|
-
* Generate a human-readable summary of what the action will do
|
|
25
|
-
* This is used by the Guardian to understand the proposed action
|
|
26
|
-
*/
|
|
27
|
-
abstract getCallSummary(action: string, params: Record<string, unknown>): string;
|
|
28
|
-
/**
|
|
29
|
-
* Get a comprehensive explanation of this tool for LLM consumption.
|
|
30
|
-
* Tools should implement this to provide detailed usage instructions with examples.
|
|
31
|
-
* This includes parameter schemas and concrete <tool_call> XML examples.
|
|
32
|
-
*/
|
|
33
|
-
abstract getToolExplanation(): string;
|
|
34
|
-
/**
|
|
35
|
-
* Validate that an action exists for this tool
|
|
36
|
-
* @throws Error if the action is not valid
|
|
37
|
-
*/
|
|
38
|
-
protected validateAction(action: string): void;
|
|
39
|
-
/**
|
|
40
|
-
* Check if the tool is initialized
|
|
41
|
-
*/
|
|
42
|
-
protected ensureInitialized(): void;
|
|
43
|
-
/**
|
|
44
|
-
* Get the full tool description including all actions
|
|
45
|
-
* Used for Driver's tool awareness - now delegates to getToolExplanation()
|
|
46
|
-
*/
|
|
47
|
-
getFullDescription(): string;
|
|
48
|
-
/**
|
|
49
|
-
* Get the JSON schema for a specific action
|
|
50
|
-
*/
|
|
51
|
-
getActionSchema(action: string): Record<string, unknown> | undefined;
|
|
52
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import * as interfaces from './smartagent.interfaces.js';
|
|
2
|
-
/**
|
|
3
|
-
* Abstract base class for tool wrappers
|
|
4
|
-
* All tool implementations should extend this class
|
|
5
|
-
*/
|
|
6
|
-
export class BaseToolWrapper {
|
|
7
|
-
isInitialized = false;
|
|
8
|
-
/**
|
|
9
|
-
* Validate that an action exists for this tool
|
|
10
|
-
* @throws Error if the action is not valid
|
|
11
|
-
*/
|
|
12
|
-
validateAction(action) {
|
|
13
|
-
const validAction = this.actions.find((a) => a.name === action);
|
|
14
|
-
if (!validAction) {
|
|
15
|
-
const availableActions = this.actions.map((a) => a.name).join(', ');
|
|
16
|
-
throw new Error(`Unknown action "${action}" for tool "${this.name}". Available actions: ${availableActions}`);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Check if the tool is initialized
|
|
21
|
-
*/
|
|
22
|
-
ensureInitialized() {
|
|
23
|
-
if (!this.isInitialized) {
|
|
24
|
-
throw new Error(`Tool "${this.name}" is not initialized. Call initialize() first.`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Get the full tool description including all actions
|
|
29
|
-
* Used for Driver's tool awareness - now delegates to getToolExplanation()
|
|
30
|
-
*/
|
|
31
|
-
getFullDescription() {
|
|
32
|
-
return this.getToolExplanation();
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get the JSON schema for a specific action
|
|
36
|
-
*/
|
|
37
|
-
getActionSchema(action) {
|
|
38
|
-
const actionDef = this.actions.find((a) => a.name === action);
|
|
39
|
-
return actionDef?.parameters;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC50b29scy5iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhZ2VudC50b29scy5iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sNEJBQTRCLENBQUM7QUFFekQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFnQixlQUFlO0lBS3pCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFpQ2hDOzs7T0FHRztJQUNPLGNBQWMsQ0FBQyxNQUFjO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUJBQW1CLE1BQU0sZUFBZSxJQUFJLENBQUMsSUFBSSx5QkFBeUIsZ0JBQWdCLEVBQUUsQ0FDN0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksZ0RBQWdELENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxNQUFjO1FBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQzlELE9BQU8sU0FBUyxFQUFFLFVBQVUsQ0FBQztJQUMvQixDQUFDO0NBQ0YifQ==
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import * as interfaces from './smartagent.interfaces.js';
|
|
2
|
-
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
3
|
-
/**
|
|
4
|
-
* Browser tool for web page interaction
|
|
5
|
-
* Wraps @push.rocks/smartbrowser (Puppeteer-based)
|
|
6
|
-
*/
|
|
7
|
-
export declare class BrowserTool extends BaseToolWrapper {
|
|
8
|
-
name: string;
|
|
9
|
-
description: string;
|
|
10
|
-
actions: interfaces.IToolAction[];
|
|
11
|
-
private smartbrowser;
|
|
12
|
-
initialize(): Promise<void>;
|
|
13
|
-
cleanup(): Promise<void>;
|
|
14
|
-
execute(action: string, params: Record<string, unknown>): Promise<interfaces.IToolExecutionResult>;
|
|
15
|
-
getToolExplanation(): string;
|
|
16
|
-
getCallSummary(action: string, params: Record<string, unknown>): string;
|
|
17
|
-
}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
import * as interfaces from './smartagent.interfaces.js';
|
|
3
|
-
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
4
|
-
/**
|
|
5
|
-
* Browser tool for web page interaction
|
|
6
|
-
* Wraps @push.rocks/smartbrowser (Puppeteer-based)
|
|
7
|
-
*/
|
|
8
|
-
export class BrowserTool extends BaseToolWrapper {
|
|
9
|
-
name = 'browser';
|
|
10
|
-
description = 'Interact with web pages - take screenshots, generate PDFs, and execute JavaScript on pages';
|
|
11
|
-
actions = [
|
|
12
|
-
{
|
|
13
|
-
name: 'screenshot',
|
|
14
|
-
description: 'Take a screenshot of a webpage',
|
|
15
|
-
parameters: {
|
|
16
|
-
type: 'object',
|
|
17
|
-
properties: {
|
|
18
|
-
url: { type: 'string', description: 'URL of the page to screenshot' },
|
|
19
|
-
},
|
|
20
|
-
required: ['url'],
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: 'pdf',
|
|
25
|
-
description: 'Generate a PDF from a webpage',
|
|
26
|
-
parameters: {
|
|
27
|
-
type: 'object',
|
|
28
|
-
properties: {
|
|
29
|
-
url: { type: 'string', description: 'URL of the page to convert to PDF' },
|
|
30
|
-
},
|
|
31
|
-
required: ['url'],
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
name: 'evaluate',
|
|
36
|
-
description: 'Execute JavaScript code on a webpage and return the result. The script runs in the browser context.',
|
|
37
|
-
parameters: {
|
|
38
|
-
type: 'object',
|
|
39
|
-
properties: {
|
|
40
|
-
url: { type: 'string', description: 'URL of the page to run the script on' },
|
|
41
|
-
script: {
|
|
42
|
-
type: 'string',
|
|
43
|
-
description: 'JavaScript code to execute. Must be a valid expression or statements that return a value.',
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
required: ['url', 'script'],
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
name: 'getPageContent',
|
|
51
|
-
description: 'Get the text content and title of a webpage',
|
|
52
|
-
parameters: {
|
|
53
|
-
type: 'object',
|
|
54
|
-
properties: {
|
|
55
|
-
url: { type: 'string', description: 'URL of the page to get content from' },
|
|
56
|
-
},
|
|
57
|
-
required: ['url'],
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
];
|
|
61
|
-
smartbrowser;
|
|
62
|
-
async initialize() {
|
|
63
|
-
this.smartbrowser = new plugins.smartbrowser.SmartBrowser();
|
|
64
|
-
await this.smartbrowser.start();
|
|
65
|
-
this.isInitialized = true;
|
|
66
|
-
}
|
|
67
|
-
async cleanup() {
|
|
68
|
-
if (this.smartbrowser) {
|
|
69
|
-
await this.smartbrowser.stop();
|
|
70
|
-
}
|
|
71
|
-
this.isInitialized = false;
|
|
72
|
-
}
|
|
73
|
-
async execute(action, params) {
|
|
74
|
-
this.validateAction(action);
|
|
75
|
-
this.ensureInitialized();
|
|
76
|
-
try {
|
|
77
|
-
switch (action) {
|
|
78
|
-
case 'screenshot': {
|
|
79
|
-
const result = await this.smartbrowser.screenshotFromPage(params.url);
|
|
80
|
-
return {
|
|
81
|
-
success: true,
|
|
82
|
-
result: {
|
|
83
|
-
url: params.url,
|
|
84
|
-
name: result.name,
|
|
85
|
-
id: result.id,
|
|
86
|
-
bufferBase64: Buffer.from(result.buffer).toString('base64'),
|
|
87
|
-
bufferLength: result.buffer.length,
|
|
88
|
-
type: 'screenshot',
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
case 'pdf': {
|
|
93
|
-
const result = await this.smartbrowser.pdfFromPage(params.url);
|
|
94
|
-
return {
|
|
95
|
-
success: true,
|
|
96
|
-
result: {
|
|
97
|
-
url: params.url,
|
|
98
|
-
name: result.name,
|
|
99
|
-
id: result.id,
|
|
100
|
-
bufferBase64: Buffer.from(result.buffer).toString('base64'),
|
|
101
|
-
bufferLength: result.buffer.length,
|
|
102
|
-
type: 'pdf',
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
case 'evaluate': {
|
|
107
|
-
const script = params.script;
|
|
108
|
-
// Create an async function from the script
|
|
109
|
-
// The script should be valid JavaScript that returns a value
|
|
110
|
-
const result = await this.smartbrowser.evaluateOnPage(params.url, async () => {
|
|
111
|
-
// This runs in the browser context
|
|
112
|
-
// We need to evaluate the script string dynamically
|
|
113
|
-
// eslint-disable-next-line no-eval
|
|
114
|
-
return eval(script);
|
|
115
|
-
});
|
|
116
|
-
return {
|
|
117
|
-
success: true,
|
|
118
|
-
result: {
|
|
119
|
-
url: params.url,
|
|
120
|
-
script: script.substring(0, 200) + (script.length > 200 ? '...' : ''),
|
|
121
|
-
evaluationResult: result,
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
case 'getPageContent': {
|
|
126
|
-
const result = await this.smartbrowser.evaluateOnPage(params.url, async () => {
|
|
127
|
-
return {
|
|
128
|
-
title: document.title,
|
|
129
|
-
textContent: document.body?.innerText || '',
|
|
130
|
-
url: window.location.href,
|
|
131
|
-
};
|
|
132
|
-
});
|
|
133
|
-
return {
|
|
134
|
-
success: true,
|
|
135
|
-
result: {
|
|
136
|
-
url: params.url,
|
|
137
|
-
title: result.title,
|
|
138
|
-
textContent: result.textContent.length > 10000
|
|
139
|
-
? result.textContent.substring(0, 10000) + '... [truncated]'
|
|
140
|
-
: result.textContent,
|
|
141
|
-
actualUrl: result.url,
|
|
142
|
-
},
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
default:
|
|
146
|
-
return {
|
|
147
|
-
success: false,
|
|
148
|
-
error: `Unknown action: ${action}`,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
return {
|
|
154
|
-
success: false,
|
|
155
|
-
error: error instanceof Error ? error.message : String(error),
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
getToolExplanation() {
|
|
160
|
-
return `## Tool: browser
|
|
161
|
-
Interact with web pages - take screenshots, generate PDFs, and execute JavaScript on pages.
|
|
162
|
-
|
|
163
|
-
### Actions:
|
|
164
|
-
|
|
165
|
-
**screenshot** - Take a screenshot of a webpage
|
|
166
|
-
Parameters:
|
|
167
|
-
- url (required): URL of the page to screenshot
|
|
168
|
-
|
|
169
|
-
Example:
|
|
170
|
-
<tool_call>
|
|
171
|
-
<tool>browser</tool>
|
|
172
|
-
<action>screenshot</action>
|
|
173
|
-
<params>{"url": "https://example.com"}</params>
|
|
174
|
-
</tool_call>
|
|
175
|
-
|
|
176
|
-
**pdf** - Generate a PDF from a webpage
|
|
177
|
-
Parameters:
|
|
178
|
-
- url (required): URL of the page to convert to PDF
|
|
179
|
-
|
|
180
|
-
Example:
|
|
181
|
-
<tool_call>
|
|
182
|
-
<tool>browser</tool>
|
|
183
|
-
<action>pdf</action>
|
|
184
|
-
<params>{"url": "https://example.com/report"}</params>
|
|
185
|
-
</tool_call>
|
|
186
|
-
|
|
187
|
-
**evaluate** - Execute JavaScript code on a webpage and return the result
|
|
188
|
-
Parameters:
|
|
189
|
-
- url (required): URL of the page to run the script on
|
|
190
|
-
- script (required): JavaScript code to execute (must return a value)
|
|
191
|
-
|
|
192
|
-
Example:
|
|
193
|
-
<tool_call>
|
|
194
|
-
<tool>browser</tool>
|
|
195
|
-
<action>evaluate</action>
|
|
196
|
-
<params>{"url": "https://example.com", "script": "document.querySelectorAll('a').length"}</params>
|
|
197
|
-
</tool_call>
|
|
198
|
-
|
|
199
|
-
**getPageContent** - Get the text content and title of a webpage
|
|
200
|
-
Parameters:
|
|
201
|
-
- url (required): URL of the page to get content from
|
|
202
|
-
|
|
203
|
-
Example:
|
|
204
|
-
<tool_call>
|
|
205
|
-
<tool>browser</tool>
|
|
206
|
-
<action>getPageContent</action>
|
|
207
|
-
<params>{"url": "https://example.com"}</params>
|
|
208
|
-
</tool_call>
|
|
209
|
-
`;
|
|
210
|
-
}
|
|
211
|
-
getCallSummary(action, params) {
|
|
212
|
-
switch (action) {
|
|
213
|
-
case 'screenshot':
|
|
214
|
-
return `Take screenshot of "${params.url}"`;
|
|
215
|
-
case 'pdf':
|
|
216
|
-
return `Generate PDF from "${params.url}"`;
|
|
217
|
-
case 'evaluate': {
|
|
218
|
-
const script = params.script;
|
|
219
|
-
const preview = script.length > 100 ? script.substring(0, 100) + '...' : script;
|
|
220
|
-
return `Execute JavaScript on "${params.url}": "${preview}"`;
|
|
221
|
-
}
|
|
222
|
-
case 'getPageContent':
|
|
223
|
-
return `Get text content and title from "${params.url}"`;
|
|
224
|
-
default:
|
|
225
|
-
return `Unknown action: ${action}`;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC50b29scy5icm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhZ2VudC50b29scy5icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsZUFBZTtJQUN2QyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ2pCLFdBQVcsR0FDaEIsNEZBQTRGLENBQUM7SUFFeEYsT0FBTyxHQUE2QjtRQUN6QztZQUNFLElBQUksRUFBRSxZQUFZO1lBQ2xCLFdBQVcsRUFBRSxnQ0FBZ0M7WUFDN0MsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRTtvQkFDVixHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRTtpQkFDdEU7Z0JBQ0QsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRDtZQUNFLElBQUksRUFBRSxLQUFLO1lBQ1gsV0FBVyxFQUFFLCtCQUErQjtZQUM1QyxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNWLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFO2lCQUMxRTtnQkFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDbEI7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUNULHFHQUFxRztZQUN2RyxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNW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
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as interfaces from './smartagent.interfaces.js';
|
|
2
|
-
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
3
|
-
/**
|
|
4
|
-
* Deno permission types for sandboxed code execution
|
|
5
|
-
*/
|
|
6
|
-
export type TDenoPermission = 'all' | 'env' | 'ffi' | 'hrtime' | 'net' | 'read' | 'run' | 'sys' | 'write';
|
|
7
|
-
/**
|
|
8
|
-
* Deno tool for executing TypeScript/JavaScript code in a sandboxed environment
|
|
9
|
-
* Wraps @push.rocks/smartdeno
|
|
10
|
-
*/
|
|
11
|
-
export declare class DenoTool extends BaseToolWrapper {
|
|
12
|
-
name: string;
|
|
13
|
-
description: string;
|
|
14
|
-
actions: interfaces.IToolAction[];
|
|
15
|
-
private smartdeno;
|
|
16
|
-
initialize(): Promise<void>;
|
|
17
|
-
cleanup(): Promise<void>;
|
|
18
|
-
execute(action: string, params: Record<string, unknown>): Promise<interfaces.IToolExecutionResult>;
|
|
19
|
-
getToolExplanation(): string;
|
|
20
|
-
getCallSummary(action: string, params: Record<string, unknown>): string;
|
|
21
|
-
}
|