@push.rocks/smartagent 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  2. package/dist_ts/00_commitinfo_data.js +9 -0
  3. package/dist_ts/index.d.ts +10 -0
  4. package/dist_ts/index.js +18 -0
  5. package/dist_ts/plugins.d.ts +6 -0
  6. package/dist_ts/plugins.js +8 -0
  7. package/dist_ts/smartagent.classes.driveragent.d.ts +70 -0
  8. package/dist_ts/smartagent.classes.driveragent.js +274 -0
  9. package/dist_ts/smartagent.classes.dualagent.d.ts +62 -0
  10. package/dist_ts/smartagent.classes.dualagent.js +298 -0
  11. package/dist_ts/smartagent.classes.guardianagent.d.ts +46 -0
  12. package/dist_ts/smartagent.classes.guardianagent.js +201 -0
  13. package/dist_ts/smartagent.classes.smartagent.d.ts +123 -0
  14. package/dist_ts/smartagent.classes.smartagent.js +274 -0
  15. package/dist_ts/smartagent.interfaces.d.ts +165 -0
  16. package/dist_ts/smartagent.interfaces.js +8 -0
  17. package/dist_ts/smartagent.tools.base.d.ts +46 -0
  18. package/dist_ts/smartagent.tools.base.js +45 -0
  19. package/dist_ts/smartagent.tools.browser.d.ts +16 -0
  20. package/dist_ts/smartagent.tools.browser.js +177 -0
  21. package/dist_ts/smartagent.tools.filesystem.d.ts +16 -0
  22. package/dist_ts/smartagent.tools.filesystem.js +352 -0
  23. package/dist_ts/smartagent.tools.http.d.ts +15 -0
  24. package/dist_ts/smartagent.tools.http.js +187 -0
  25. package/dist_ts/smartagent.tools.shell.d.ts +16 -0
  26. package/dist_ts/smartagent.tools.shell.js +155 -0
  27. package/npmextra.json +18 -0
  28. package/package.json +50 -0
  29. package/readme.hints.md +16 -0
  30. package/readme.md +299 -0
  31. package/ts/00_commitinfo_data.ts +8 -0
  32. package/ts/index.ts +29 -0
  33. package/ts/plugins.ts +14 -0
  34. package/ts/smartagent.classes.driveragent.ts +321 -0
  35. package/ts/smartagent.classes.dualagent.ts +350 -0
  36. package/ts/smartagent.classes.guardianagent.ts +241 -0
  37. package/ts/smartagent.interfaces.ts +210 -0
  38. package/ts/smartagent.tools.base.ts +80 -0
  39. package/ts/smartagent.tools.browser.ts +200 -0
  40. package/ts/smartagent.tools.filesystem.ts +379 -0
  41. package/ts/smartagent.tools.http.ts +205 -0
  42. package/ts/smartagent.tools.shell.ts +182 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export const commitinfo = {
5
+ name: '@push.rocks/smartagent',
6
+ version: '1.0.2',
7
+ description: 'an agentic framework built on top of @push.rocks/smartai'
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDBEQUEwRDtDQUN4RSxDQUFBIn0=
@@ -0,0 +1,10 @@
1
+ export { DualAgentOrchestrator } from './smartagent.classes.dualagent.js';
2
+ export { DriverAgent } from './smartagent.classes.driveragent.js';
3
+ export { GuardianAgent } from './smartagent.classes.guardianagent.js';
4
+ export { BaseToolWrapper } from './smartagent.tools.base.js';
5
+ export { FilesystemTool } from './smartagent.tools.filesystem.js';
6
+ export { HttpTool } from './smartagent.tools.http.js';
7
+ export { ShellTool } from './smartagent.tools.shell.js';
8
+ export { BrowserTool } from './smartagent.tools.browser.js';
9
+ export * from './smartagent.interfaces.js';
10
+ export { type ISmartAiOptions, type TProvider, type ChatMessage, type ChatOptions, type ChatResponse, } from '@push.rocks/smartai';
@@ -0,0 +1,18 @@
1
+ import * as plugins from './plugins.js';
2
+ // Export the dual-agent orchestrator (main entry point)
3
+ export { DualAgentOrchestrator } from './smartagent.classes.dualagent.js';
4
+ // Export individual agents
5
+ export { DriverAgent } from './smartagent.classes.driveragent.js';
6
+ export { GuardianAgent } from './smartagent.classes.guardianagent.js';
7
+ // Export base tool class for custom tool creation
8
+ export { BaseToolWrapper } from './smartagent.tools.base.js';
9
+ // Export standard tools
10
+ export { FilesystemTool } from './smartagent.tools.filesystem.js';
11
+ export { HttpTool } from './smartagent.tools.http.js';
12
+ export { ShellTool } from './smartagent.tools.shell.js';
13
+ export { BrowserTool } from './smartagent.tools.browser.js';
14
+ // Export all interfaces
15
+ export * from './smartagent.interfaces.js';
16
+ // Re-export useful types from smartai
17
+ export {} from '@push.rocks/smartai';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qyx3REFBd0Q7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsMkJBQTJCO0FBQzNCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdEUsa0RBQWtEO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCx3QkFBd0I7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVELHdCQUF3QjtBQUN4QixjQUFjLDRCQUE0QixDQUFDO0FBRTNDLHNDQUFzQztBQUN0QyxPQUFPLEVBTU4sTUFBTSxxQkFBcUIsQ0FBQyJ9
@@ -0,0 +1,6 @@
1
+ import * as smartai from '@push.rocks/smartai';
2
+ import * as smartfs from '@push.rocks/smartfs';
3
+ import * as smartrequest from '@push.rocks/smartrequest';
4
+ import * as smartbrowser from '@push.rocks/smartbrowser';
5
+ import * as smartshell from '@push.rocks/smartshell';
6
+ export { smartai, smartfs, smartrequest, smartbrowser, smartshell, };
@@ -0,0 +1,8 @@
1
+ // @push.rocks scope
2
+ import * as smartai from '@push.rocks/smartai';
3
+ import * as smartfs from '@push.rocks/smartfs';
4
+ import * as smartrequest from '@push.rocks/smartrequest';
5
+ import * as smartbrowser from '@push.rocks/smartbrowser';
6
+ import * as smartshell from '@push.rocks/smartshell';
7
+ export { smartai, smartfs, smartrequest, smartbrowser, smartshell, };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsR0FDWCxDQUFDIn0=
@@ -0,0 +1,70 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as interfaces from './smartagent.interfaces.js';
3
+ import type { BaseToolWrapper } from './smartagent.tools.base.js';
4
+ /**
5
+ * DriverAgent - Executes tasks by reasoning and proposing tool calls
6
+ * Works in conjunction with GuardianAgent for approval
7
+ */
8
+ export declare class DriverAgent {
9
+ private provider;
10
+ private systemMessage;
11
+ private messageHistory;
12
+ private tools;
13
+ constructor(provider: plugins.smartai.MultiModalModel, systemMessage?: string);
14
+ /**
15
+ * Register a tool for use by the driver
16
+ */
17
+ registerTool(tool: BaseToolWrapper): void;
18
+ /**
19
+ * Get all registered tools
20
+ */
21
+ getTools(): Map<string, BaseToolWrapper>;
22
+ /**
23
+ * Initialize a new conversation for a task
24
+ */
25
+ startTask(task: string): Promise<interfaces.IAgentMessage>;
26
+ /**
27
+ * Continue the conversation with feedback or results
28
+ */
29
+ continueWithMessage(message: string): Promise<interfaces.IAgentMessage>;
30
+ /**
31
+ * Parse tool call proposals from assistant response
32
+ */
33
+ parseToolCallProposals(response: string): interfaces.IToolCallProposal[];
34
+ /**
35
+ * Parse the content inside a tool_call block
36
+ */
37
+ private parseToolCallContent;
38
+ /**
39
+ * Extract parameters from XML-like format when JSON parsing fails
40
+ */
41
+ private extractParamsFromXml;
42
+ /**
43
+ * Check if the response indicates task completion
44
+ */
45
+ isTaskComplete(response: string): boolean;
46
+ /**
47
+ * Check if the response needs clarification or user input
48
+ */
49
+ needsClarification(response: string): boolean;
50
+ /**
51
+ * Extract the final result from a completed task
52
+ */
53
+ extractTaskResult(response: string): string | null;
54
+ /**
55
+ * Build tool descriptions for the system message
56
+ */
57
+ private buildToolDescriptions;
58
+ /**
59
+ * Generate a unique proposal ID
60
+ */
61
+ private generateProposalId;
62
+ /**
63
+ * Get the default system message for the driver
64
+ */
65
+ private getDefaultSystemMessage;
66
+ /**
67
+ * Reset the conversation state
68
+ */
69
+ reset(): void;
70
+ }
@@ -0,0 +1,274 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as interfaces from './smartagent.interfaces.js';
3
+ /**
4
+ * DriverAgent - Executes tasks by reasoning and proposing tool calls
5
+ * Works in conjunction with GuardianAgent for approval
6
+ */
7
+ export class DriverAgent {
8
+ provider;
9
+ systemMessage;
10
+ messageHistory = [];
11
+ tools = new Map();
12
+ constructor(provider, systemMessage) {
13
+ this.provider = provider;
14
+ this.systemMessage = systemMessage || this.getDefaultSystemMessage();
15
+ }
16
+ /**
17
+ * Register a tool for use by the driver
18
+ */
19
+ registerTool(tool) {
20
+ this.tools.set(tool.name, tool);
21
+ }
22
+ /**
23
+ * Get all registered tools
24
+ */
25
+ getTools() {
26
+ return this.tools;
27
+ }
28
+ /**
29
+ * Initialize a new conversation for a task
30
+ */
31
+ async startTask(task) {
32
+ // Reset message history
33
+ this.messageHistory = [];
34
+ // Build the user message
35
+ const userMessage = `TASK: ${task}\n\nAnalyze this task and determine what actions are needed. If you need to use a tool, provide a tool call proposal.`;
36
+ // Add to history
37
+ this.messageHistory.push({
38
+ role: 'user',
39
+ content: userMessage,
40
+ });
41
+ // Build tool descriptions for the system message
42
+ const toolDescriptions = this.buildToolDescriptions();
43
+ const fullSystemMessage = `${this.systemMessage}\n\n## Available Tools\n${toolDescriptions}`;
44
+ // Get response from provider
45
+ const response = await this.provider.chat({
46
+ systemMessage: fullSystemMessage,
47
+ userMessage: userMessage,
48
+ messageHistory: [],
49
+ });
50
+ // Add assistant response to history
51
+ this.messageHistory.push({
52
+ role: 'assistant',
53
+ content: response.message,
54
+ });
55
+ return {
56
+ role: 'assistant',
57
+ content: response.message,
58
+ };
59
+ }
60
+ /**
61
+ * Continue the conversation with feedback or results
62
+ */
63
+ async continueWithMessage(message) {
64
+ // Add the new message to history
65
+ this.messageHistory.push({
66
+ role: 'user',
67
+ content: message,
68
+ });
69
+ // Build tool descriptions for the system message
70
+ const toolDescriptions = this.buildToolDescriptions();
71
+ const fullSystemMessage = `${this.systemMessage}\n\n## Available Tools\n${toolDescriptions}`;
72
+ // Get response from provider (pass all but last user message as history)
73
+ const historyForChat = this.messageHistory.slice(0, -1);
74
+ const response = await this.provider.chat({
75
+ systemMessage: fullSystemMessage,
76
+ userMessage: message,
77
+ messageHistory: historyForChat,
78
+ });
79
+ // Add assistant response to history
80
+ this.messageHistory.push({
81
+ role: 'assistant',
82
+ content: response.message,
83
+ });
84
+ return {
85
+ role: 'assistant',
86
+ content: response.message,
87
+ };
88
+ }
89
+ /**
90
+ * Parse tool call proposals from assistant response
91
+ */
92
+ parseToolCallProposals(response) {
93
+ const proposals = [];
94
+ // Match <tool_call>...</tool_call> blocks
95
+ const toolCallRegex = /<tool_call>([\s\S]*?)<\/tool_call>/g;
96
+ let match;
97
+ while ((match = toolCallRegex.exec(response)) !== null) {
98
+ const content = match[1];
99
+ try {
100
+ const proposal = this.parseToolCallContent(content);
101
+ if (proposal) {
102
+ proposals.push(proposal);
103
+ }
104
+ }
105
+ catch (error) {
106
+ // Skip malformed tool calls
107
+ console.warn('Failed to parse tool call:', error);
108
+ }
109
+ }
110
+ return proposals;
111
+ }
112
+ /**
113
+ * Parse the content inside a tool_call block
114
+ */
115
+ parseToolCallContent(content) {
116
+ // Extract tool name
117
+ const toolMatch = content.match(/<tool>(.*?)<\/tool>/s);
118
+ if (!toolMatch)
119
+ return null;
120
+ const toolName = toolMatch[1].trim();
121
+ // Extract action
122
+ const actionMatch = content.match(/<action>(.*?)<\/action>/s);
123
+ if (!actionMatch)
124
+ return null;
125
+ const action = actionMatch[1].trim();
126
+ // Extract params (JSON)
127
+ const paramsMatch = content.match(/<params>([\s\S]*?)<\/params>/);
128
+ let params = {};
129
+ if (paramsMatch) {
130
+ try {
131
+ params = JSON.parse(paramsMatch[1].trim());
132
+ }
133
+ catch {
134
+ // Try to extract individual parameters if JSON fails
135
+ params = this.extractParamsFromXml(paramsMatch[1]);
136
+ }
137
+ }
138
+ // Extract reasoning (optional)
139
+ const reasoningMatch = content.match(/<reasoning>([\s\S]*?)<\/reasoning>/);
140
+ const reasoning = reasoningMatch ? reasoningMatch[1].trim() : undefined;
141
+ return {
142
+ proposalId: this.generateProposalId(),
143
+ toolName,
144
+ action,
145
+ params,
146
+ reasoning,
147
+ };
148
+ }
149
+ /**
150
+ * Extract parameters from XML-like format when JSON parsing fails
151
+ */
152
+ extractParamsFromXml(content) {
153
+ const params = {};
154
+ const paramRegex = /<(\w+)>([\s\S]*?)<\/\1>/g;
155
+ let match;
156
+ while ((match = paramRegex.exec(content)) !== null) {
157
+ const key = match[1];
158
+ let value = match[2].trim();
159
+ // Try to parse as JSON for arrays/objects
160
+ try {
161
+ value = JSON.parse(value);
162
+ }
163
+ catch {
164
+ // Keep as string if not valid JSON
165
+ }
166
+ params[key] = value;
167
+ }
168
+ return params;
169
+ }
170
+ /**
171
+ * Check if the response indicates task completion
172
+ */
173
+ isTaskComplete(response) {
174
+ // Check for explicit completion markers
175
+ const completionMarkers = [
176
+ '<task_complete>',
177
+ '<task_completed>',
178
+ 'TASK COMPLETE',
179
+ 'Task completed successfully',
180
+ ];
181
+ const lowerResponse = response.toLowerCase();
182
+ return completionMarkers.some(marker => lowerResponse.includes(marker.toLowerCase()));
183
+ }
184
+ /**
185
+ * Check if the response needs clarification or user input
186
+ */
187
+ needsClarification(response) {
188
+ const clarificationMarkers = [
189
+ '<needs_clarification>',
190
+ '<question>',
191
+ 'please clarify',
192
+ 'could you specify',
193
+ 'what do you mean by',
194
+ ];
195
+ const lowerResponse = response.toLowerCase();
196
+ return clarificationMarkers.some(marker => lowerResponse.includes(marker.toLowerCase()));
197
+ }
198
+ /**
199
+ * Extract the final result from a completed task
200
+ */
201
+ extractTaskResult(response) {
202
+ // Try to extract from result tags
203
+ const resultMatch = response.match(/<task_result>([\s\S]*?)<\/task_result>/);
204
+ if (resultMatch) {
205
+ return resultMatch[1].trim();
206
+ }
207
+ const completeMatch = response.match(/<task_complete>([\s\S]*?)<\/task_complete>/);
208
+ if (completeMatch) {
209
+ return completeMatch[1].trim();
210
+ }
211
+ return null;
212
+ }
213
+ /**
214
+ * Build tool descriptions for the system message
215
+ */
216
+ buildToolDescriptions() {
217
+ const descriptions = [];
218
+ for (const tool of this.tools.values()) {
219
+ descriptions.push(tool.getFullDescription());
220
+ }
221
+ return descriptions.join('\n\n');
222
+ }
223
+ /**
224
+ * Generate a unique proposal ID
225
+ */
226
+ generateProposalId() {
227
+ return `prop_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
228
+ }
229
+ /**
230
+ * Get the default system message for the driver
231
+ */
232
+ getDefaultSystemMessage() {
233
+ return `You are an AI assistant that executes tasks by using available tools.
234
+
235
+ ## Your Role
236
+ You analyze tasks, break them down into steps, and use tools to accomplish goals.
237
+
238
+ ## Tool Usage Format
239
+ When you need to use a tool, output a tool call proposal in this format:
240
+
241
+ <tool_call>
242
+ <tool>tool_name</tool>
243
+ <action>action_name</action>
244
+ <params>
245
+ {"param1": "value1", "param2": "value2"}
246
+ </params>
247
+ <reasoning>Brief explanation of why this action is needed</reasoning>
248
+ </tool_call>
249
+
250
+ ## Guidelines
251
+ 1. Think step by step about what needs to be done
252
+ 2. Use only the tools that are available to you
253
+ 3. Provide clear reasoning for each tool call
254
+ 4. If a tool call is rejected, adapt your approach based on the feedback
255
+ 5. When the task is complete, indicate this clearly:
256
+
257
+ <task_complete>
258
+ Brief summary of what was accomplished
259
+ </task_complete>
260
+
261
+ ## Important
262
+ - Only propose ONE tool call at a time
263
+ - Wait for the result before proposing the next action
264
+ - If you encounter an error, analyze it and try an alternative approach
265
+ - If you need clarification, ask using <needs_clarification>your question</needs_clarification>`;
266
+ }
267
+ /**
268
+ * Reset the conversation state
269
+ */
270
+ reset() {
271
+ this.messageHistory = [];
272
+ }
273
+ }
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5jbGFzc2VzLmRyaXZlcmFnZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhZ2VudC5jbGFzc2VzLmRyaXZlcmFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sNEJBQTRCLENBQUM7QUFHekQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDZCxRQUFRLENBQWtDO0lBQzFDLGFBQWEsQ0FBUztJQUN0QixjQUFjLEdBQWtDLEVBQUUsQ0FBQztJQUNuRCxLQUFLLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEQsWUFDRSxRQUF5QyxFQUN6QyxhQUFzQjtRQUV0QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsSUFBcUI7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBWTtRQUNqQyx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFekIseUJBQXlCO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLFNBQVMsSUFBSSx1SEFBdUgsQ0FBQztRQUV6SixpQkFBaUI7UUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsV0FB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
@@ -0,0 +1,62 @@
1
+ import * as interfaces from './smartagent.interfaces.js';
2
+ import { BaseToolWrapper } from './smartagent.tools.base.js';
3
+ /**
4
+ * DualAgentOrchestrator - Coordinates Driver and Guardian agents
5
+ * Manages the complete lifecycle of task execution with tool approval
6
+ */
7
+ export declare class DualAgentOrchestrator {
8
+ private options;
9
+ private smartai;
10
+ private driverProvider;
11
+ private guardianProvider;
12
+ private driver;
13
+ private guardian;
14
+ private tools;
15
+ private isRunning;
16
+ private conversationHistory;
17
+ constructor(options: interfaces.IDualAgentOptions);
18
+ /**
19
+ * Get provider by name
20
+ */
21
+ private getProviderByName;
22
+ /**
23
+ * Register a custom tool
24
+ */
25
+ registerTool(tool: BaseToolWrapper): void;
26
+ /**
27
+ * Register all standard tools
28
+ */
29
+ registerStandardTools(): void;
30
+ /**
31
+ * Initialize all tools (eager loading)
32
+ */
33
+ start(): Promise<void>;
34
+ /**
35
+ * Cleanup all tools
36
+ */
37
+ stop(): Promise<void>;
38
+ /**
39
+ * Run a task through the dual-agent system
40
+ */
41
+ run(task: string): Promise<interfaces.IDualAgentRunResult>;
42
+ /**
43
+ * Continue an existing task with user input
44
+ */
45
+ continueTask(userInput: string): Promise<interfaces.IDualAgentRunResult>;
46
+ /**
47
+ * Get the conversation history
48
+ */
49
+ getHistory(): interfaces.IAgentMessage[];
50
+ /**
51
+ * Update the guardian policy
52
+ */
53
+ setGuardianPolicy(policyPrompt: string): void;
54
+ /**
55
+ * Check if orchestrator is running
56
+ */
57
+ isActive(): boolean;
58
+ /**
59
+ * Get registered tool names
60
+ */
61
+ getToolNames(): string[];
62
+ }