@push.rocks/smartagent 1.0.2 → 1.1.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 +1 -1
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +2 -1
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/smartagent.classes.dualagent.js +3 -1
- package/dist_ts/smartagent.tools.deno.d.ts +20 -0
- package/dist_ts/smartagent.tools.deno.js +153 -0
- package/package.json +2 -1
- package/readme.md +88 -20
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +1 -0
- package/ts/plugins.ts +2 -0
- package/ts/smartagent.classes.dualagent.ts +2 -0
- package/ts/smartagent.tools.deno.ts +191 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartagent',
|
|
6
|
-
version: '1.0
|
|
6
|
+
version: '1.1.0',
|
|
7
7
|
description: 'an agentic framework built on top of @push.rocks/smartai'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDBEQUEwRDtDQUN4RSxDQUFBIn0=
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -6,5 +6,6 @@ export { FilesystemTool } from './smartagent.tools.filesystem.js';
|
|
|
6
6
|
export { HttpTool } from './smartagent.tools.http.js';
|
|
7
7
|
export { ShellTool } from './smartagent.tools.shell.js';
|
|
8
8
|
export { BrowserTool } from './smartagent.tools.browser.js';
|
|
9
|
+
export { DenoTool, type TDenoPermission } from './smartagent.tools.deno.js';
|
|
9
10
|
export * from './smartagent.interfaces.js';
|
|
10
11
|
export { type ISmartAiOptions, type TProvider, type ChatMessage, type ChatOptions, type ChatResponse, } from '@push.rocks/smartai';
|
package/dist_ts/index.js
CHANGED
|
@@ -11,8 +11,9 @@ export { FilesystemTool } from './smartagent.tools.filesystem.js';
|
|
|
11
11
|
export { HttpTool } from './smartagent.tools.http.js';
|
|
12
12
|
export { ShellTool } from './smartagent.tools.shell.js';
|
|
13
13
|
export { BrowserTool } from './smartagent.tools.browser.js';
|
|
14
|
+
export { DenoTool } from './smartagent.tools.deno.js';
|
|
14
15
|
// Export all interfaces
|
|
15
16
|
export * from './smartagent.interfaces.js';
|
|
16
17
|
// Re-export useful types from smartai
|
|
17
18
|
export {} from '@push.rocks/smartai';
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qyx3REFBd0Q7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsMkJBQTJCO0FBQzNCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdEUsa0RBQWtEO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCx3QkFBd0I7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQXdCLE1BQU0sNEJBQTRCLENBQUM7QUFFNUUsd0JBQXdCO0FBQ3hCLGNBQWMsNEJBQTRCLENBQUM7QUFFM0Msc0NBQXNDO0FBQ3RDLE9BQU8sRUFNTixNQUFNLHFCQUFxQixDQUFDIn0=
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as smartai from '@push.rocks/smartai';
|
|
2
|
+
import * as smartdeno from '@push.rocks/smartdeno';
|
|
2
3
|
import * as smartfs from '@push.rocks/smartfs';
|
|
3
4
|
import * as smartrequest from '@push.rocks/smartrequest';
|
|
4
5
|
import * as smartbrowser from '@push.rocks/smartbrowser';
|
|
5
6
|
import * as smartshell from '@push.rocks/smartshell';
|
|
6
|
-
export { smartai, smartfs, smartrequest, smartbrowser, smartshell, };
|
|
7
|
+
export { smartai, smartdeno, smartfs, smartrequest, smartbrowser, smartshell, };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// @push.rocks scope
|
|
2
2
|
import * as smartai from '@push.rocks/smartai';
|
|
3
|
+
import * as smartdeno from '@push.rocks/smartdeno';
|
|
3
4
|
import * as smartfs from '@push.rocks/smartfs';
|
|
4
5
|
import * as smartrequest from '@push.rocks/smartrequest';
|
|
5
6
|
import * as smartbrowser from '@push.rocks/smartbrowser';
|
|
6
7
|
import * as smartshell from '@push.rocks/smartshell';
|
|
7
|
-
export { smartai, smartfs, smartrequest, smartbrowser, smartshell, };
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
export { smartai, smartdeno, smartfs, smartrequest, smartbrowser, smartshell, };
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFDTCxPQUFPLEVBQ1AsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsR0FDWCxDQUFDIn0=
|
|
@@ -7,6 +7,7 @@ import { FilesystemTool } from './smartagent.tools.filesystem.js';
|
|
|
7
7
|
import { HttpTool } from './smartagent.tools.http.js';
|
|
8
8
|
import { ShellTool } from './smartagent.tools.shell.js';
|
|
9
9
|
import { BrowserTool } from './smartagent.tools.browser.js';
|
|
10
|
+
import { DenoTool } from './smartagent.tools.deno.js';
|
|
10
11
|
/**
|
|
11
12
|
* DualAgentOrchestrator - Coordinates Driver and Guardian agents
|
|
12
13
|
* Manages the complete lifecycle of task execution with tool approval
|
|
@@ -79,6 +80,7 @@ export class DualAgentOrchestrator {
|
|
|
79
80
|
new HttpTool(),
|
|
80
81
|
new ShellTool(),
|
|
81
82
|
new BrowserTool(),
|
|
83
|
+
new DenoTool(),
|
|
82
84
|
];
|
|
83
85
|
for (const tool of standardTools) {
|
|
84
86
|
this.registerTool(tool);
|
|
@@ -295,4 +297,4 @@ export class DualAgentOrchestrator {
|
|
|
295
297
|
return Array.from(this.tools.keys());
|
|
296
298
|
}
|
|
297
299
|
}
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5jbGFzc2VzLmR1YWxhZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWdlbnQuY2xhc3Nlcy5kdWFsYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtJQUN4QixPQUFPLENBQStCO0lBQ3RDLE9BQU8sQ0FBMEI7SUFDakMsY0FBYyxDQUFrQztJQUNoRCxnQkFBZ0IsQ0FBa0M7SUFDbEQsTUFBTSxDQUFjO0lBQ3BCLFFBQVEsQ0FBZ0I7SUFDeEIsS0FBSyxHQUFpQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2hELFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsbUJBQW1CLEdBQStCLEVBQUUsQ0FBQztJQUU3RCxZQUFZLE9BQXFDO1FBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixhQUFhLEVBQUUsRUFBRTtZQUNqQix3QkFBd0IsRUFBRSxDQUFDO1lBQzNCLGVBQWUsRUFBRSxRQUFRO1lBQ3pCLEdBQUcsT0FBTztTQUNYLENBQUM7UUFFRiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBELGdCQUFnQjtRQUNoQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWdCLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7WUFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1lBQ3ZELENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXhCLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsWUFBdUM7UUFDL0QsUUFBUSxZQUFZLEVBQUUsQ0FBQztZQUNyQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUNyQyxLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQ3hDLEtBQUssWUFBWTtnQkFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7WUFDekMsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDckMsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDbkMsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDbEMsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDbEM7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLElBQXFCO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0kscUJBQXFCO1FBQzFCLE1BQU0sYUFBYSxHQUFHO1lBQ3BCLElBQUksY0FBYyxFQUFFO1lBQ3BCLElBQUksUUFBUSxFQUFFO1lBQ2QsSUFBSSxTQUFTLEVBQUU7WUFDZixJQUFJLFdBQVcsRUFBRTtTQUNsQixDQUFDO1FBRUYsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixnQkFBZ0I7UUFDaEIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTNCLHVCQUF1QjtRQUN2QixNQUFNLFlBQVksR0FBb0IsRUFBRSxDQUFDO1FBQ3pDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sZUFBZSxHQUFvQixFQUFFLENBQUM7UUFFNUMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDdkMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBWTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksV0FBVyxHQUFrQixJQUFJLENBQUM7UUFFdEMsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUVILGlDQUFpQztRQUNqQyxJQUFJLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFOUMsT0FDRSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFjO1lBQ3hDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXlCO1lBQzlELENBQUMsU0FBUyxFQUNWLENBQUM7WUFDRCxVQUFVLEVBQUUsQ0FBQztZQUViLDRCQUE0QjtZQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQztnQkFDOUYsTUFBTTtZQUNSLENBQUM7WUFFRCxzQ0FBc0M7WUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMzRCwwQ0FBMEM7Z0JBQzFDLE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLE1BQU0sRUFBRSxjQUFjLENBQUMsT0FBTztvQkFDOUIsVUFBVTtvQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtvQkFDakMsTUFBTSxFQUFFLHNCQUFzQjtpQkFDL0IsQ0FBQztZQUNKLENBQUM7WUFFRCw0QkFBNEI7WUFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0UsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzQiwyQ0FBMkM7Z0JBQzNDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQ3BELDJJQUEySSxDQUM1SSxDQUFDO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzlDLFNBQVM7WUFDWCxDQUFDO1lBRUQsNkNBQTZDO1lBQzdDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU5Qix5QkFBeUI7WUFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUQsSUFBSSxRQUFzQyxDQUFDO1lBRTNDLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHFCQUFxQjtnQkFDckIsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztnQkFFMUIsbUJBQW1CO2dCQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDVixNQUFNLFlBQVksR0FBRyxTQUFTLFFBQVEsQ0FBQyxRQUFRLGNBQWMsQ0FBQztvQkFDOUQsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDcEQsZUFBZSxZQUFZLHNDQUFzQyxDQUNsRSxDQUFDO29CQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzlDLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUVwRSx3QkFBd0I7b0JBQ3hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPO3dCQUNsQyxDQUFDLENBQUMsZ0JBQWdCLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO3dCQUNyRyxDQUFDLENBQUMsZUFBZSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUU3RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO3dCQUM1QixJQUFJLEVBQUUsUUFBUTt3QkFDZCxPQUFPLEVBQUUsYUFBYTt3QkFDdEIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFVBQVUsRUFBRSxNQUFNO3FCQUNuQixDQUFDLENBQUM7b0JBRUgsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLE1BQU0sWUFBWSxHQUFHLDBCQUEwQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEcsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDcEQsZUFBZSxZQUFZLHNDQUFzQyxDQUNsRSxDQUFDO29CQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sV0FBVztnQkFDWCxxQkFBcUIsRUFBRSxDQUFDO2dCQUV4QiwyQkFBMkI7Z0JBQzNCLElBQUksUUFBUSxHQUFHLG1DQUFtQyxDQUFDO2dCQUNuRCxRQUFRLElBQUksYUFBYSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7Z0JBRTdDLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEQsUUFBUSxJQUFJLGdCQUFnQixRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDcEYsQ0FBQztnQkFFRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDekIsUUFBUSxJQUFJLGtCQUFrQixRQUFRLENBQUMsV0FBVyxJQUFJLENBQUM7Z0JBQ3pELENBQUM7Z0JBRUQsUUFBUSxJQUFJLHNEQUFzRCxDQUFDO2dCQUVuRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO29CQUM1QixJQUFJLEVBQUUsUUFBUTtvQkFDZCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLGdCQUFnQixFQUFFLFFBQVE7aUJBQzNCLENBQUMsQ0FBQztnQkFFSCxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksTUFBTSxHQUFtQyxXQUFXLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFjLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxHQUFHLHdCQUF3QixDQUFDO1lBQ3BDLENBQUM7aUJBQU0sSUFBSSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF5QixFQUFFLENBQUM7Z0JBQzNFLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsU0FBUztZQUNsQixTQUFTO1lBQ1QsTUFBTSxFQUFFLFdBQVcsSUFBSSxjQUFjLENBQUMsT0FBTztZQUM3QyxVQUFVO1lBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDakMsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQWlCO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLFNBQVM7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFOUMsd0JBQXdCO1FBQ3hCLHlGQUF5RjtRQUN6RixPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7WUFDZCxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU87WUFDOUIsVUFBVSxFQUFFLENBQUM7WUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUNqQyxNQUFNLEVBQUUsYUFBYTtTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNmLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLFlBQW9CO1FBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNqQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiJ9
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5jbGFzc2VzLmR1YWxhZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWdlbnQuY2xhc3Nlcy5kdWFsYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXREOzs7R0FHRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFDeEIsT0FBTyxDQUErQjtJQUN0QyxPQUFPLENBQTBCO0lBQ2pDLGNBQWMsQ0FBa0M7SUFDaEQsZ0JBQWdCLENBQWtDO0lBQ2xELE1BQU0sQ0FBYztJQUNwQixRQUFRLENBQWdCO0lBQ3hCLEtBQUssR0FBaUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoRCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLG1CQUFtQixHQUErQixFQUFFLENBQUM7SUFFN0QsWUFBWSxPQUFxQztRQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsYUFBYSxFQUFFLEVBQUU7WUFDakIsd0JBQXdCLEVBQUUsQ0FBQztZQUMzQixlQUFlLEVBQUUsUUFBUTtZ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
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
getCallSummary(action: string, params: Record<string, unknown>): string;
|
|
20
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
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
|
+
* Deno tool for executing TypeScript/JavaScript code in a sandboxed environment
|
|
6
|
+
* Wraps @push.rocks/smartdeno
|
|
7
|
+
*/
|
|
8
|
+
export class DenoTool extends BaseToolWrapper {
|
|
9
|
+
name = 'deno';
|
|
10
|
+
description = 'Execute TypeScript/JavaScript code in a sandboxed Deno environment with fine-grained permission control';
|
|
11
|
+
actions = [
|
|
12
|
+
{
|
|
13
|
+
name: 'execute',
|
|
14
|
+
description: 'Execute TypeScript/JavaScript code and return stdout/stderr. Code runs in Deno sandbox with specified permissions.',
|
|
15
|
+
parameters: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
code: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
description: 'TypeScript/JavaScript code to execute',
|
|
21
|
+
},
|
|
22
|
+
permissions: {
|
|
23
|
+
type: 'array',
|
|
24
|
+
items: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
enum: ['all', 'env', 'ffi', 'hrtime', 'net', 'read', 'run', 'sys', 'write'],
|
|
27
|
+
},
|
|
28
|
+
description: 'Deno permissions to grant. Default: none (fully sandboxed). Options: all, env, net, read, write, run, sys, ffi, hrtime',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
required: ['code'],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'executeWithResult',
|
|
36
|
+
description: 'Execute code that outputs JSON on the last line of stdout. The JSON is parsed and returned as the result.',
|
|
37
|
+
parameters: {
|
|
38
|
+
type: 'object',
|
|
39
|
+
properties: {
|
|
40
|
+
code: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
description: 'Code that console.logs a JSON value on the final line. This JSON will be parsed and returned.',
|
|
43
|
+
},
|
|
44
|
+
permissions: {
|
|
45
|
+
type: 'array',
|
|
46
|
+
items: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
enum: ['all', 'env', 'ffi', 'hrtime', 'net', 'read', 'run', 'sys', 'write'],
|
|
49
|
+
},
|
|
50
|
+
description: 'Deno permissions to grant',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
required: ['code'],
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
smartdeno;
|
|
58
|
+
async initialize() {
|
|
59
|
+
this.smartdeno = new plugins.smartdeno.SmartDeno();
|
|
60
|
+
await this.smartdeno.start();
|
|
61
|
+
this.isInitialized = true;
|
|
62
|
+
}
|
|
63
|
+
async cleanup() {
|
|
64
|
+
if (this.smartdeno) {
|
|
65
|
+
await this.smartdeno.stop();
|
|
66
|
+
}
|
|
67
|
+
this.isInitialized = false;
|
|
68
|
+
}
|
|
69
|
+
async execute(action, params) {
|
|
70
|
+
this.validateAction(action);
|
|
71
|
+
this.ensureInitialized();
|
|
72
|
+
try {
|
|
73
|
+
const code = params.code;
|
|
74
|
+
const permissions = params.permissions || [];
|
|
75
|
+
// Execute the script
|
|
76
|
+
const result = await this.smartdeno.executeScript(code, {
|
|
77
|
+
permissions,
|
|
78
|
+
});
|
|
79
|
+
switch (action) {
|
|
80
|
+
case 'execute': {
|
|
81
|
+
return {
|
|
82
|
+
success: result.exitCode === 0,
|
|
83
|
+
result: {
|
|
84
|
+
exitCode: result.exitCode,
|
|
85
|
+
stdout: result.stdout,
|
|
86
|
+
stderr: result.stderr,
|
|
87
|
+
permissions,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
case 'executeWithResult': {
|
|
92
|
+
if (result.exitCode !== 0) {
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
error: `Script failed with exit code ${result.exitCode}: ${result.stderr}`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Parse the last line of stdout as JSON
|
|
99
|
+
const lines = result.stdout.trim().split('\n');
|
|
100
|
+
const lastLine = lines[lines.length - 1];
|
|
101
|
+
try {
|
|
102
|
+
const parsedResult = JSON.parse(lastLine);
|
|
103
|
+
return {
|
|
104
|
+
success: true,
|
|
105
|
+
result: {
|
|
106
|
+
parsed: parsedResult,
|
|
107
|
+
stdout: result.stdout,
|
|
108
|
+
stderr: result.stderr,
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (parseError) {
|
|
113
|
+
return {
|
|
114
|
+
success: false,
|
|
115
|
+
error: `Failed to parse JSON from last line of output: ${lastLine}`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
default:
|
|
120
|
+
return {
|
|
121
|
+
success: false,
|
|
122
|
+
error: `Unknown action: ${action}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
return {
|
|
128
|
+
success: false,
|
|
129
|
+
error: error instanceof Error ? error.message : String(error),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
getCallSummary(action, params) {
|
|
134
|
+
const code = params.code;
|
|
135
|
+
const permissions = params.permissions || [];
|
|
136
|
+
// Create a preview of the code (first 100 chars)
|
|
137
|
+
const codePreview = code.length > 100 ? code.substring(0, 100) + '...' : code;
|
|
138
|
+
// Escape newlines for single-line display
|
|
139
|
+
const cleanPreview = codePreview.replace(/\n/g, '\\n');
|
|
140
|
+
const permissionInfo = permissions.length > 0
|
|
141
|
+
? ` [permissions: ${permissions.join(', ')}]`
|
|
142
|
+
: ' [sandboxed - no permissions]';
|
|
143
|
+
switch (action) {
|
|
144
|
+
case 'execute':
|
|
145
|
+
return `Execute Deno code${permissionInfo}: "${cleanPreview}"`;
|
|
146
|
+
case 'executeWithResult':
|
|
147
|
+
return `Execute Deno code and parse JSON result${permissionInfo}: "${cleanPreview}"`;
|
|
148
|
+
default:
|
|
149
|
+
return `Unknown action: ${action}`;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC50b29scy5kZW5vLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhZ2VudC50b29scy5kZW5vLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBZ0I3RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUyxTQUFRLGVBQWU7SUFDcEMsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNkLFdBQVcsR0FDaEIseUdBQXlHLENBQUM7SUFFckcsT0FBTyxHQUE2QjtRQUN6QztZQUNFLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUNULG9IQUFvSDtZQUN0SCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsUUFBUTt3QkFDZCxXQUFXLEVBQUUsdUNBQXVDO3FCQUNyRDtvQkFDRCxXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLE9BQU87d0JBQ2IsS0FBSyxFQUFFOzRCQUNMLElBQUksRUFBRSxRQUFROzRCQUNkLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO3lCQUM1RTt3QkFDRCxXQUFXLEVBQ1Qsd0hBQXdIO3FCQUMzSDtpQkFDRjtnQkFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7YUFDbkI7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixXQUFXLEVBQ1QsMkdBQTJHO1lBQzdHLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxVQUFVLEVB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartagent",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "an agentic framework built on top of @push.rocks/smartai",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@push.rocks/smartai": "^0.8.0",
|
|
20
20
|
"@push.rocks/smartbrowser": "^2.0.8",
|
|
21
|
+
"@push.rocks/smartdeno": "^1.2.0",
|
|
21
22
|
"@push.rocks/smartfs": "^1.2.0",
|
|
22
23
|
"@push.rocks/smartrequest": "^5.0.1",
|
|
23
24
|
"@push.rocks/smartshell": "^3.3.0"
|
package/readme.md
CHANGED
|
@@ -19,26 +19,33 @@ This design ensures safe tool use through AI-based policy evaluation rather than
|
|
|
19
19
|
|
|
20
20
|
## Architecture
|
|
21
21
|
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
22
|
+
```mermaid
|
|
23
|
+
flowchart TB
|
|
24
|
+
subgraph Input
|
|
25
|
+
Task["User Task"]
|
|
26
|
+
Policy["Guardian Policy Prompt"]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
subgraph Orchestrator["DualAgentOrchestrator"]
|
|
30
|
+
Driver["Driver Agent<br/><i>Reason + Plan</i>"]
|
|
31
|
+
Guardian["Guardian Agent<br/><i>Evaluate against policy</i>"]
|
|
32
|
+
|
|
33
|
+
Driver -->|"tool call proposal"| Guardian
|
|
34
|
+
Guardian -->|"approve / reject + feedback"| Driver
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
subgraph Tools["Standard Tools"]
|
|
38
|
+
FS["Filesystem"]
|
|
39
|
+
HTTP["HTTP"]
|
|
40
|
+
Shell["Shell"]
|
|
41
|
+
Browser["Browser"]
|
|
42
|
+
Deno["Deno"]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
Task --> Orchestrator
|
|
46
|
+
Policy --> Guardian
|
|
47
|
+
Driver -->|"execute<br/>(if approved)"| Tools
|
|
48
|
+
Tools -->|"result"| Driver
|
|
42
49
|
```
|
|
43
50
|
|
|
44
51
|
## Quick Start
|
|
@@ -139,6 +146,46 @@ Web page interaction using `@push.rocks/smartbrowser` (Puppeteer-based).
|
|
|
139
146
|
</tool_call>
|
|
140
147
|
```
|
|
141
148
|
|
|
149
|
+
### DenoTool
|
|
150
|
+
Execute TypeScript/JavaScript code in a sandboxed Deno environment using `@push.rocks/smartdeno`.
|
|
151
|
+
|
|
152
|
+
**Actions**: `execute`, `executeWithResult`
|
|
153
|
+
|
|
154
|
+
**Permissions**: `all`, `env`, `ffi`, `hrtime`, `net`, `read`, `run`, `sys`, `write`
|
|
155
|
+
|
|
156
|
+
By default, code runs fully sandboxed with no permissions. Permissions must be explicitly requested.
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
// Simple code execution
|
|
160
|
+
<tool_call>
|
|
161
|
+
<tool>deno</tool>
|
|
162
|
+
<action>execute</action>
|
|
163
|
+
<params>{"code": "console.log('Hello from Deno!')"}</params>
|
|
164
|
+
<reasoning>Running a simple script to verify the environment</reasoning>
|
|
165
|
+
</tool_call>
|
|
166
|
+
|
|
167
|
+
// Code with network permission
|
|
168
|
+
<tool_call>
|
|
169
|
+
<tool>deno</tool>
|
|
170
|
+
<action>execute</action>
|
|
171
|
+
<params>{
|
|
172
|
+
"code": "const resp = await fetch('https://api.example.com/data'); console.log(await resp.json());",
|
|
173
|
+
"permissions": ["net"]
|
|
174
|
+
}</params>
|
|
175
|
+
<reasoning>Fetching data from API using Deno's fetch</reasoning>
|
|
176
|
+
</tool_call>
|
|
177
|
+
|
|
178
|
+
// Execute and parse JSON result
|
|
179
|
+
<tool_call>
|
|
180
|
+
<tool>deno</tool>
|
|
181
|
+
<action>executeWithResult</action>
|
|
182
|
+
<params>{
|
|
183
|
+
"code": "const result = { sum: 2 + 2, date: new Date().toISOString() }; console.log(JSON.stringify(result));"
|
|
184
|
+
}</params>
|
|
185
|
+
<reasoning>Computing values and returning structured data</reasoning>
|
|
186
|
+
</tool_call>
|
|
187
|
+
```
|
|
188
|
+
|
|
142
189
|
## Guardian Policy Examples
|
|
143
190
|
|
|
144
191
|
### Strict Security Policy
|
|
@@ -174,6 +221,27 @@ Always verify:
|
|
|
174
221
|
`;
|
|
175
222
|
```
|
|
176
223
|
|
|
224
|
+
### Deno Code Execution Policy
|
|
225
|
+
```typescript
|
|
226
|
+
const denoPolicy = `
|
|
227
|
+
DENO CODE EXECUTION POLICY:
|
|
228
|
+
- ONLY allow 'read' permission for files within the workspace
|
|
229
|
+
- REJECT 'all' permission unless explicitly justified for the task
|
|
230
|
+
- REJECT 'run' permission (subprocess execution) without specific justification
|
|
231
|
+
- REJECT code that attempts to:
|
|
232
|
+
- Access credentials or environment secrets (even with 'env' permission)
|
|
233
|
+
- Make network requests to internal/private IP ranges
|
|
234
|
+
- Write to system directories
|
|
235
|
+
- FLAG obfuscated or encoded code (base64, eval with dynamic strings)
|
|
236
|
+
- Prefer sandboxed execution (no permissions) when possible
|
|
237
|
+
|
|
238
|
+
When evaluating code:
|
|
239
|
+
- Review the actual code content, not just permissions
|
|
240
|
+
- Consider what data the code could exfiltrate
|
|
241
|
+
- Verify network endpoints are legitimate public APIs
|
|
242
|
+
`;
|
|
243
|
+
```
|
|
244
|
+
|
|
177
245
|
## Configuration Options
|
|
178
246
|
|
|
179
247
|
```typescript
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/index.ts
CHANGED
|
@@ -15,6 +15,7 @@ export { FilesystemTool } from './smartagent.tools.filesystem.js';
|
|
|
15
15
|
export { HttpTool } from './smartagent.tools.http.js';
|
|
16
16
|
export { ShellTool } from './smartagent.tools.shell.js';
|
|
17
17
|
export { BrowserTool } from './smartagent.tools.browser.js';
|
|
18
|
+
export { DenoTool, type TDenoPermission } from './smartagent.tools.deno.js';
|
|
18
19
|
|
|
19
20
|
// Export all interfaces
|
|
20
21
|
export * from './smartagent.interfaces.js';
|
package/ts/plugins.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @push.rocks scope
|
|
2
2
|
import * as smartai from '@push.rocks/smartai';
|
|
3
|
+
import * as smartdeno from '@push.rocks/smartdeno';
|
|
3
4
|
import * as smartfs from '@push.rocks/smartfs';
|
|
4
5
|
import * as smartrequest from '@push.rocks/smartrequest';
|
|
5
6
|
import * as smartbrowser from '@push.rocks/smartbrowser';
|
|
@@ -7,6 +8,7 @@ import * as smartshell from '@push.rocks/smartshell';
|
|
|
7
8
|
|
|
8
9
|
export {
|
|
9
10
|
smartai,
|
|
11
|
+
smartdeno,
|
|
10
12
|
smartfs,
|
|
11
13
|
smartrequest,
|
|
12
14
|
smartbrowser,
|
|
@@ -7,6 +7,7 @@ import { FilesystemTool } from './smartagent.tools.filesystem.js';
|
|
|
7
7
|
import { HttpTool } from './smartagent.tools.http.js';
|
|
8
8
|
import { ShellTool } from './smartagent.tools.shell.js';
|
|
9
9
|
import { BrowserTool } from './smartagent.tools.browser.js';
|
|
10
|
+
import { DenoTool } from './smartagent.tools.deno.js';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* DualAgentOrchestrator - Coordinates Driver and Guardian agents
|
|
@@ -87,6 +88,7 @@ export class DualAgentOrchestrator {
|
|
|
87
88
|
new HttpTool(),
|
|
88
89
|
new ShellTool(),
|
|
89
90
|
new BrowserTool(),
|
|
91
|
+
new DenoTool(),
|
|
90
92
|
];
|
|
91
93
|
|
|
92
94
|
for (const tool of standardTools) {
|
|
@@ -0,0 +1,191 @@
|
|
|
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
|
+
/**
|
|
6
|
+
* Deno permission types for sandboxed code execution
|
|
7
|
+
*/
|
|
8
|
+
export type TDenoPermission =
|
|
9
|
+
| 'all'
|
|
10
|
+
| 'env'
|
|
11
|
+
| 'ffi'
|
|
12
|
+
| 'hrtime'
|
|
13
|
+
| 'net'
|
|
14
|
+
| 'read'
|
|
15
|
+
| 'run'
|
|
16
|
+
| 'sys'
|
|
17
|
+
| 'write';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Deno tool for executing TypeScript/JavaScript code in a sandboxed environment
|
|
21
|
+
* Wraps @push.rocks/smartdeno
|
|
22
|
+
*/
|
|
23
|
+
export class DenoTool extends BaseToolWrapper {
|
|
24
|
+
public name = 'deno';
|
|
25
|
+
public description =
|
|
26
|
+
'Execute TypeScript/JavaScript code in a sandboxed Deno environment with fine-grained permission control';
|
|
27
|
+
|
|
28
|
+
public actions: interfaces.IToolAction[] = [
|
|
29
|
+
{
|
|
30
|
+
name: 'execute',
|
|
31
|
+
description:
|
|
32
|
+
'Execute TypeScript/JavaScript code and return stdout/stderr. Code runs in Deno sandbox with specified permissions.',
|
|
33
|
+
parameters: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
code: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'TypeScript/JavaScript code to execute',
|
|
39
|
+
},
|
|
40
|
+
permissions: {
|
|
41
|
+
type: 'array',
|
|
42
|
+
items: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
enum: ['all', 'env', 'ffi', 'hrtime', 'net', 'read', 'run', 'sys', 'write'],
|
|
45
|
+
},
|
|
46
|
+
description:
|
|
47
|
+
'Deno permissions to grant. Default: none (fully sandboxed). Options: all, env, net, read, write, run, sys, ffi, hrtime',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
required: ['code'],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'executeWithResult',
|
|
55
|
+
description:
|
|
56
|
+
'Execute code that outputs JSON on the last line of stdout. The JSON is parsed and returned as the result.',
|
|
57
|
+
parameters: {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
code: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
description:
|
|
63
|
+
'Code that console.logs a JSON value on the final line. This JSON will be parsed and returned.',
|
|
64
|
+
},
|
|
65
|
+
permissions: {
|
|
66
|
+
type: 'array',
|
|
67
|
+
items: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
enum: ['all', 'env', 'ffi', 'hrtime', 'net', 'read', 'run', 'sys', 'write'],
|
|
70
|
+
},
|
|
71
|
+
description: 'Deno permissions to grant',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
required: ['code'],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
private smartdeno!: plugins.smartdeno.SmartDeno;
|
|
80
|
+
|
|
81
|
+
public async initialize(): Promise<void> {
|
|
82
|
+
this.smartdeno = new plugins.smartdeno.SmartDeno();
|
|
83
|
+
await this.smartdeno.start();
|
|
84
|
+
this.isInitialized = true;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public async cleanup(): Promise<void> {
|
|
88
|
+
if (this.smartdeno) {
|
|
89
|
+
await this.smartdeno.stop();
|
|
90
|
+
}
|
|
91
|
+
this.isInitialized = false;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public async execute(
|
|
95
|
+
action: string,
|
|
96
|
+
params: Record<string, unknown>
|
|
97
|
+
): Promise<interfaces.IToolExecutionResult> {
|
|
98
|
+
this.validateAction(action);
|
|
99
|
+
this.ensureInitialized();
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
const code = params.code as string;
|
|
103
|
+
const permissions = (params.permissions as TDenoPermission[]) || [];
|
|
104
|
+
|
|
105
|
+
// Execute the script
|
|
106
|
+
const result = await this.smartdeno.executeScript(code, {
|
|
107
|
+
permissions,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
switch (action) {
|
|
111
|
+
case 'execute': {
|
|
112
|
+
return {
|
|
113
|
+
success: result.exitCode === 0,
|
|
114
|
+
result: {
|
|
115
|
+
exitCode: result.exitCode,
|
|
116
|
+
stdout: result.stdout,
|
|
117
|
+
stderr: result.stderr,
|
|
118
|
+
permissions,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
case 'executeWithResult': {
|
|
124
|
+
if (result.exitCode !== 0) {
|
|
125
|
+
return {
|
|
126
|
+
success: false,
|
|
127
|
+
error: `Script failed with exit code ${result.exitCode}: ${result.stderr}`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Parse the last line of stdout as JSON
|
|
132
|
+
const lines = result.stdout.trim().split('\n');
|
|
133
|
+
const lastLine = lines[lines.length - 1];
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
const parsedResult = JSON.parse(lastLine);
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
result: {
|
|
140
|
+
parsed: parsedResult,
|
|
141
|
+
stdout: result.stdout,
|
|
142
|
+
stderr: result.stderr,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
} catch (parseError) {
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
error: `Failed to parse JSON from last line of output: ${lastLine}`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
default:
|
|
154
|
+
return {
|
|
155
|
+
success: false,
|
|
156
|
+
error: `Unknown action: ${action}`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
} catch (error) {
|
|
160
|
+
return {
|
|
161
|
+
success: false,
|
|
162
|
+
error: error instanceof Error ? error.message : String(error),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
public getCallSummary(action: string, params: Record<string, unknown>): string {
|
|
168
|
+
const code = params.code as string;
|
|
169
|
+
const permissions = (params.permissions as string[]) || [];
|
|
170
|
+
|
|
171
|
+
// Create a preview of the code (first 100 chars)
|
|
172
|
+
const codePreview = code.length > 100 ? code.substring(0, 100) + '...' : code;
|
|
173
|
+
// Escape newlines for single-line display
|
|
174
|
+
const cleanPreview = codePreview.replace(/\n/g, '\\n');
|
|
175
|
+
|
|
176
|
+
const permissionInfo = permissions.length > 0
|
|
177
|
+
? ` [permissions: ${permissions.join(', ')}]`
|
|
178
|
+
: ' [sandboxed - no permissions]';
|
|
179
|
+
|
|
180
|
+
switch (action) {
|
|
181
|
+
case 'execute':
|
|
182
|
+
return `Execute Deno code${permissionInfo}: "${cleanPreview}"`;
|
|
183
|
+
|
|
184
|
+
case 'executeWithResult':
|
|
185
|
+
return `Execute Deno code and parse JSON result${permissionInfo}: "${cleanPreview}"`;
|
|
186
|
+
|
|
187
|
+
default:
|
|
188
|
+
return `Unknown action: ${action}`;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|